• MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long _query time值 的SQL,则会被记录到慢查询日志中。
  • 具体指运行时间超过long query _time值的SQL,则会被记录到慢查询日志中。**long query_time的默认值为10**, 意思是运行10秒以上的语句。
  • 由他来查看哪些SQL超出了我们的最大忍耐时间值,比如一条sq|执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的sql,结合explain进行全面分析。

    开启慢查询日志

    image.png
    1. SHOW VARIABLES LIKE '%slow_query_log%'
    2. # 重启后会失效 不建议永久开启,会消耗性能。
    3. set global slow_query_log = 1

    查看当前多少秒算慢,设置新的阙值

    ```sql SHOW VARIABLES LIKE ‘long_query_time%’;

set global long_query_time=3;

需要重新连接或者新开一个回话才能看到修改值。

SHOW VARIABLES LIKE ‘long_query_time%’;

show global status like ‘%Slow_ queries%’; ```

查看慢查询日志

关于慢查询的参数slow_query_log_file ,它指定慢查询日志文件的存放路径,系统默认会给一个缺省的文件host name slow.log ( 如果没有指定参数slow_query_log_file的话 )

日志分析工具mysqldumpshow

image.png

得到返回记录集最多的10个SQL

mysqldumpslow -s r -t 10 /ar/lib/mysql/xxx-slow.log

得到访问次数最多的10个SQL

mysqldumpslow -s c -t 10 /var/lib/mysql/xxx-slow.log

得到按照时间排序的前10条里面含有左连接的查询语句

mysqldumpslow -s t -t 10 -g “left join” /var/lib/mysql/xxx-slow.log

建议在使用这些命令时结合|和more使用,否则有可能出现爆屏情况

mysqldumpslow -s r -t 10 /var/ib/mysql/xxx-slow.log| more


image.png
从慢查询日志里面摘选一条慢查询日志,数据组成如下

  • “Time: 2021-04-05T07:50:53.243703Z”:查询执行时间
  • “User@Host: root[root] @ localhost [] Id: 3”:用户名 、用户的 IP 信 息、线程 ID 号
  • “Query_time: 0.000495”:执行花费的时长【单位:毫秒】
  • “Lock_time: 0.000170”:执行获得锁的时长
  • “Rows_sent”:获得的结果行数“Rows_examined”:扫描的数据行数
  • “SET timestamp”:这 SQL 执行的具体时间
  • 最后一行:执行的 SQL 语句