目录
什么是慢日志检查开关
慢日志检查会根据用户自定义的时间,把自定义时间外执行成功的SQL语句性能信息存入到慢日志中,方便用户管理员对慢日志进行优化
查看慢日志开关是否启动
以下命令均在MySQL客户端下输入!
另外需要注意,我们手动开启慢查询的命令,在mysql服务重启后就会失效,作为开发人员,我们需要时手动开启开关即可,如果你非要让mysql开机自启动慢查询,请在配置文件中修改参数,本篇不做介绍。
先看看慢查询是否开启
show variables like 'slow_query_log';
可以看到它默认处于OFF状态
查看慢日志变量信息
show variables like '%log%';
记住这个开关默认是关闭状态的
这是慢日志文件默认存储的路径
开启慢日志变量开关
set global log_queries_not_using_indexes=on;
自定义慢日志存放时间
set global long_query_time=1;
开启慢日志开关
set global slow_query_log=on;
再次查看慢日志变量信息
show variables like '%log%';
可以看到慢日志变量和慢日志都已开启
测试
在mysql中执行一则查询语句
然后复制一个会话,在另一个会话中,不进入mysql,输入命令,查询慢日志文件
more /var/lib/mysql/master-slow.log
可以看到,这里面会详尽记录你执行的SQL的性能参数
这时候你会奇怪,为什么我设置了只有超过1S的SQL语句才能存到日志中,而现在日志中存的是所有执行的SQL语句呢?
注意:慢日志默认会记录所有SQL语句,当你设置了自动存入的时间必须要重新连接mysql或者新开一个会话,否则不会生效!!!
再次测试,执行一条SQL,
select sleep(4);
另一个端口查询日志,
more /var/lib/mysql/master-slow.log
你会发现如果用时在3S以上会存入慢查询日志中,同理,如果SQL执行<3秒不会存入慢查询日志
如何通过慢日志分析有问题的SQL
1.看查询次数多并且每次查询占用时间长的SQL
2.看IO大的SQL,看Rows examine项,扫描行数越多,IO越大
3. 看未命中索引的SQL,通过分析Rows examine和Rows Send,看索引的命中率