MySQL慢查询日志实操(图文解析)

文 / @UTHEME

MySQL慢查询日志是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过特定阀值的SQL语句。本文将为大家介绍如何开启MySQL慢查询日志以及如何使用mysqldumpslow工具分析慢查询。

首先,我们需要设置MySQL慢查询日志。临时设置可以使用以下命令:

set global slow_query_log=on;
set global long_query_time=1;
set global log_output=file;

其中,slow_query_log表示开启慢查询日志;long_query_time是阀值设置,查询时间高于这个临界点的都会被记录到慢查询日志中;log_output表示慢查询存储的方式,这里设置为file,表示慢查询日志保存在文件中。

查询慢查询日志的开启状态和慢查询日志储存的位置可以使用以下命令:

show variables like '%quer%';

查看存放日志的形式可以使用以下命令:

show variables like 'log_output';

除了临时设置,我们还可以进行永久设置。修改my.cnf文件,在[mysqld]section增加如下参数:

[mysqld]
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slow-query.log
long_query_time=1
log_queries_not_using_indexes=1

其中,slow_query_log=1表示开启慢查询,0表示关闭;slow_query_log_file指定慢查询日志路径,需要MySQL对该路径有写权限;long_query_time=1表示查询时间>=1秒才记录日志,默认10s;log_queries_not_using_indexes=1表明记录没有使用索引的SQL语句。

设置完毕后,我们可以制造慢查询并执行,例如:select sleep(1);然后打开慢查询日志文件,可以看到上述慢查询的SQL语句被记录到日志中。

最后,我们介绍一下MySQL自带的分析慢查询的工具mysqldumpslow。该工具是Perl脚本,常用参数有-s(排序方式),-t(topN查询),-g(正则表达式)。例如,按照时间排的top5个SQL语句可以使用以下命令:

mysqldumpslow -s t -t 5 /var/lib/mysql/slow-query.log

按照时间排序且含有'like'的top5个SQL语句可以使用以下命令:

mysqldumpslow -s t -t 3 -g "like" /var/lib/mysql/slow-query.log

最后,需要注意的是,慢查询日志会占用磁盘空间,因此需要定期清理。清理的方法如下:

SET GLOBAL slow_query_log='OFF';
ALTER TABLE mysql.slow_log RENAME mysql.slow_log_drop;
CREATE TABLE mysql.slow_log LIKE mysql.slow_log_drop;
SET GLOBAL slow_query_log='ON';
DROP TABLE mysql.slow_log_drop;

通过本文的介绍,相信大家已经了解如何开启MySQL慢查询日志以及如何使用mysqldumpslow工具分析慢查询。希望对大家有所帮助!

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。