对线上数据库来说,慢查询是系统并发的大敌,对系统的稳定运行有致命的隐患,特别是对业务快速发展的系统,或者用户并发快速提高,或有某些时段突发提高的系统来说,特别危险。需要随时关注。Mysql 的 slow_query_log是挖掘发现慢sql的利器
Mysql 慢查询日志相关配置
- slow_query_log
slow quere log的开关,当值为1的时候说明开启慢查询。
- slow_query_log_file
指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log
- long_query_time
记录超过的时间,默认为10s
- log_queries_not_using_indexes
没有使用索引的query,记录sql到慢查询,可以根据情况决定是否开启
- log_throttle_queries_not_using_indexes
没有使用索引的query,最大记录次数,比如 select * from XXX; 设置最大记录次数为3,从第4次开始,慢日志中将不会再出现此sql
- log_slow_admin_statements
表示是否将 慢管理语句(如 :analyze table 和 alter table 等)记入慢查询日志。
- log_slow_slave_statements
该参数在从库上设置,决定是否记录在主从复制过程中超过long_query_time的SQL,如果binlog格式是row,该参数无效,无论如何都不会记录sql到慢日志
- min_examined_row_limit
如果完成sql查询所检索的数据行数,大于min_examined_row_limit指定数值,则记录到慢日志
总结
1、log_slow_admin_statements 记录管理类慢查询sql
2、log_queries_not_using_indexes 记录未命中索引的sql,log_throttle_queries_not_using_indexes 控制记录次数
3、long_query_time 控制慢查询的时间门槛,超过的sql就算慢查询
4、min_examined_row_limit 控制慢查询sql检索数据的行数,低于该值不记录慢查询
5、log_slow_slave_statements 控制主从复制从库的慢查询(默认不记录),且要求binlog格式是statement,row模式无效。