【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】

发布时间 2023-12-26 14:23:04作者: 时间的漩涡1992

分析慢SQL的步骤
1.慢查询的开启并捕获:开启慢查询日志,设置阈值,比如超过5秒钟的就是慢SQL,至少跑1天,看看生产的慢SQL情况,并将它抓取出来
2.explain + 慢SQL分析
3.show Profile。(比explain还要详细,可以查询SQL在MySQL数据库中的执行细节和生命周期情况)
4.运维经理 OR DBA,进行MySQL数据库服务器的参数调优。(后端程序员没有这个权限)

慢查询日志(定位慢sql)

基本介绍

慢查询日志是什么?

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。

  • long_query_time的默认值为10,意思是运行10秒以上的语句
  • 由慢查询日志来查看哪些SQL超出了我们的最大忍耐时间值,比如一条SQL执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒钟的SQL,结合之前explain进行全面分析

特别说明

**默认情况下,MySQL数据库没有开启慢查询日志,**需要我们手动来设置这个参数。

当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件。

查看慢查询日志是否开以及如何开启

  • 查看慢查询日志是否开启:SHOW VARIABLES LIKE '%slow_query_log%';
  • 开启慢查询日志:SET GLOBAL slow_query_log = 1;。使用该方法开启MySQL的慢查询日志只对当前数据库生效,如果MySQL重启后会失效。
 1 mysql>
 2 mysql> use mysql;
 3 Database changed
 4 mysql> show variables like '%slow_query_log%';
 5 +---------------------+-------------------------------+
 6 | Variable_name       | Value                         |
 7 +---------------------+-------------------------------+
 8 | slow_query_log      | ON                            |
 9 | slow_query_log_file | /var/lib/mysql/mysql-slow.log |
10 +---------------------+-------------------------------+
11 2 rows in set (0.00 sec)
12 
13 mysql> set global slow_query_log = 1;
14 Query OK, 0 rows affected (0.00 sec)
View Code