通常我们可以通过开启 MySQL 慢查询日志来定位慢查询 SQL。
开启慢查询日志
首先,通过如下命令查看 MySQL 数据库是否开启了慢查询日志和慢查询日志文件的存储位置。
SHOW VARIABLES LIKE 'slow_query_log%';
通过如下命令开启慢查询日志:
SET GLOBAL slow_query_log = ON;
SET GLOBAL slow_query_log_file = 'D:/tools/mysql-5.6.17-winx64/data/slow.log';
SET GLOBAL log_queries_not_using_indexes = ON;
/*单位是秒*/
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 文件,看看慢查询日志保存了哪些数据。
- Time:日志记录的时间
- User@Host:执行的用户及主机
- Query_time:查询耗费时间
- Lock_time:锁表时间
- Rows_sent:发送给请求方的记录条数
- Rows_examined:语句扫描的记录条数
- SET timestamp:语句执行的时间点
- select ….:执行的具体语句
通过 MySQL mysqldumpslow 工具分析慢查询日志
MySQL 提供了一个慢查询日志分析工具:mysqldumpslow,可以通过该工具简单分析慢查询日志内容。
通过在 MySQL bin 目录下执行 perl mysqldumpslow.pl --help
命令查看该工具提供了哪些指令。
- -s:表示通过(al,at,ar,c,l,r,t)来排序,al:是平均锁表时间,ar:平均数据发送时间,at:平均查询时间,c:计数(这条慢 SQL 执行次数),l:锁表时间,r:数据发送时间,t:查询时间
- -t:显示多少行
Windows 系统需要先安装 perl 环境,然后在 MySQL 的 bin 目录,运行如下命令查看慢查询日志信息:
perl mysqldumpslow.pl -t 10 -s at D:/tools/mysql-5.6.17-winx64/data/slow.log
该命令会分析所有慢查询日志,把我们想要的日志信息内容输出。
业界还提供了一些慢查询日志的分析工具:mysqlsla、pt-query-digest
作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/sdilxh 来源:殷建卫 - 架构笔记 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。