慢查询日志可帮助定位可能存在的SQL语句,从而进行SQL语句层面的优化。例如,可以在MySQL启动时设置一个阈值,将运行时间超过该值的SQL语句都记录到日志文件中。
在默认情况下,MySQL并不启动慢查询日志,需要手动将这个给参数设置为ON: 查看:show variables like ''slow_query_log; 开启:set global slow_query_log=1; 注意:
使用 set global slow_query_log=1; 开启了慢查询日志只对当前数据库生效,如果MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf。 将下面两行配置进my.cnf slow_query_log = 1 slow_query_log_file = /var/lib/mysql/xxxx.log(慢查询日志的存放路径)慢查询的阈值是由参数long_query_time控制,在默认情况下long_query_time的值为10秒。 查看:show variables like 'long_query_time%'; 修改:set global long_query_time=3; 注意:
加入运行时间等于long_query_time的情况,并不会记录下来。必须大于long_query_time才会被记录参数说明:
s:是表示按照何种方式i排序:c:访问次数l:锁定时间r:访问记录t:查询时间al:平均锁定时间ar:平均返回记录数t:即为返回前面多少条数据g:后面搭配一个正则表达式,大小写不敏感常用语句:
得到返回记录集最多的10个SQL语句 mysqldumpslow -s r -t 10 /var/lib/mysql/xxxx.log 得到访问次数最多的10个SQL语句 mysqldumpslow -s c -t 10 /var/lib/mysql/xxxx.log 得到按照时间排序的前10条里面含有左连接的查询语句 mysqldumpslow -s t -t 10 -g "left jion" /var/lib/mysql/xxxx.log 另外建议在使用这些命令时结合 | 和 more使用,否则有可能出现爆屏的情况 mysqldumpslow -s r -t 10 /var/lib/mysql/xxxx.log | more