mysql 慢查询日志
-
配置参数
long_query_time
的值(默认是10秒),超过这个值的就会被是为慢查询,后面可以根据 EXPLAIN 来跟踪 -
默认是关闭的。如果打开超过阈值的会被记录,所以建议在调优的时候才打开这个参数
-- 查看慢查询是否开启 show variables like 'slow_query_log'; -- 打开 set global slow_query_log = on; -- 慢查询日志文件位置 show variables like 'slow_query_log_file'; -- 同时查看慢查询状态和日志文件位置 show variables like 'slow_query_log%'; -- 配置阈值为 1 秒(这只对新建的会话生效,如果要使当前会话也生效,还要配置) set global long_query_time = 1; -- 当前会话也生效 set long_query_time = 1; -- 查看阈值(全局) show global variables like 'long_query_time'; -- 当前会话阈值 show variables like 'long_query_time'; -- 慢查询日志记录 show status like 'slow_queries';
-
min_examined_row_limit,慢查询记录时,默认不管多少条结果,哪怕是 0 条,只要查询时间超过阈值,就会被记录。通过
min_examined_row_limit
参数能指定最少查询条数。比如慢查询阈值是 2 秒,最少条数是 100 条,当查询时间大于2秒并且结果集大于 100 才会被记录到日志文件中 -
查看慢查询日志的 sql,使用
mysqldumpslow ...(参数) 慢查询文件(slow_query_log_file)
命令查看。mysqldumpslow 命令全部的参数使用mysqldumpslow -help
查看,下面列举部分- 这是系统命令(不能再 navicat 中执行)
- s:排序方式。c:访问次数;r:返回记录;t:查询时间;at:平均查询时间(默认)
- t:取多少条
- a:不抽象参数(说人话就是显示 where 字段值)
-
g:正则表达式,过滤 指定的sql,大小写不敏感
-- 取最长查询时间前 20 条 mysqldumplog -s t -t 20 -a /home/mysql/data3002/mysql/slow_query.log -- 取最长查询时间前 20 条(只查询 sql 中有 join 的即多表查询) mysqldumplog -s t -t 20 -a -g 'join' /home/mysql/data3002/mysql/slow_query.log