通常我们可以通过开启 MySQL 慢查询日志来定位慢查询 SQL。

开启慢查询日志

首先,通过如下命令查看 MySQL 数据库是否开启了慢查询日志和慢查询日志文件的存储位置。

  1. SHOW VARIABLES LIKE 'slow_query_log%';

image.png

通过如下命令开启慢查询日志:

  1. SET GLOBAL slow_query_log = ON;
  2. SET GLOBAL slow_query_log_file = 'D:/tools/mysql-5.6.17-winx64/data/slow.log';
  3. SET GLOBAL log_queries_not_using_indexes = ON;
  4. /*单位是秒*/
  5. SET GLOBAL long_query_time = 0.1;
  • slow_query_log:ON 表示开启慢查询日志,OFF 表示关闭慢查询日志
  • slow_query_log_file:记录慢查询日志的文件地址(默认为主机名.log)
  • long_query_time:指定了慢查询的阈值,单位是秒,即执行语句的时间若超过这个值则为慢查询语句
  • log_queries_not_using_indexes:ON 表示会记录所有没有利用索引来进行查询的语句,前提是 slow_query_log 的值也是 ON,否则,不会奏效,OFF 表示不会记录所有没有利用索引来进行查询的语句。

查看慢查询日志

文本方式查看

开启慢查询日志后,执行一些耗时较长的 SQL 语句,打开 slow.log 文件,看看慢查询日志保存了哪些数据。

image.png

  • Time:日志记录的时间
  • User@Host:执行的用户及主机
  • Query_time:查询耗费时间
  • Lock_time:锁表时间
  • Rows_sent:发送给请求方的记录条数
  • Rows_examined:语句扫描的记录条数
  • SET timestamp:语句执行的时间点
  • select ….:执行的具体语句

通过 MySQL mysqldumpslow 工具分析慢查询日志

MySQL 提供了一个慢查询日志分析工具:mysqldumpslow,可以通过该工具简单分析慢查询日志内容。

通过在 MySQL bin 目录下执行 perl mysqldumpslow.pl --help 命令查看该工具提供了哪些指令。

image.png

  • -s:表示通过(al,at,ar,c,l,r,t)来排序,al:是平均锁表时间,ar:平均数据发送时间,at:平均查询时间,c:计数(这条慢 SQL 执行次数),l:锁表时间,r:数据发送时间,t:查询时间
  • -t:显示多少行

Windows 系统需要先安装 perl 环境,然后在 MySQL 的 bin 目录,运行如下命令查看慢查询日志信息:

  1. perl mysqldumpslow.pl -t 10 -s at D:/tools/mysql-5.6.17-winx64/data/slow.log

image.png

该命令会分析所有慢查询日志,把我们想要的日志信息内容输出。

业界还提供了一些慢查询日志的分析工具:mysqlsla、pt-query-digest

作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/sdilxh 来源:殷建卫 - 架构笔记 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。