1.查看慢日志是否开启(默认关闭的):
show VARIABLES like '%slow_query_log%';
2.如何开启呢?
set global slow_query_log = 1;
此命令只对当前数据库有效,如果mysql重启后,则会失效,如果要想一直有效,则要配置my.cnf文件,配置如下:
修改my.cnf文件,[mysqld]下增加或修改参数slow_query_log和slow_query_log_file后,然后重启mysql服务器。
也即将如下两行配置进my.cnf文件([mysqld]下配置):
slow_query_log = 1;
slow_query_log_file = /usr/local/mysql/data/cnstrong-slow.log;
long_query_time = 3;
log_output = FILE;
3.查看当前多少秒算慢:
SHOW VARIABLES LIKE '%slow_query_time%';
4.设置慢的阙值时间(3s):
set global long_query_time = 3;
需要重启一个连接才能看到新的修改值。
5.查看当前系统有多少条慢查询记录:
show global status like '%Slow_queries%';
6.日志分析:
在生产环境中如果手工分析日志,查找,分析sql,显然太麻烦,mysql提供了分析工具mysqldumpslow。
mysqldumpslow --help会有部分参数:
s:表示按照任何方式排序;
c:访问次数;
l:锁定时间;
r:返回记录;
t:查询时间;
al:平均锁定时间;
ar:平均返回记录数;
at:平均查询时间;
t:返回前面多少条数据;
g:后面搭建一个正则匹配模式,大小写不敏感的;
示例:
得到返回记录集最多的10个sql:
mysqldumpslow -s r -t 10 /usr/local/mysql/data/cnstrong-slow.log;
得到访问次数最多的10个sql:
mysqldumpslow -s c -t 10 /usr/local/mysql/data/cnstrong-slow.log;
得到按照时间排序的前10个里面含有左连接的查询sql:
mysqldumpslow -s t -t 10 -g "left join" /usr/local/mysql/data/cnstrong-slow.log;
建议在使用命令时结合 | 和more 使用,否则可能出现爆屏情况:
mysqldumpslow -s r -t 10 /usr/local/mysql/data/cnstrong-slow.log | more;