MySQL 怎么排查慢 sql

通过配置开启 SET slow_query_log=1,只对当前会话有效,如果需要开启全局,则需要使用 SET GLOBAL slow_query_log = 1
设置 log 文件路径 SET slow_query_log_file="file_path",如果没有为慢查询日志文件指定文件名,默认文件名为 host_name-slow.log
设置阈值,单位秒 SET long_query_time=3

与慢查询相关的设置说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
+------------------------------------------+------------------------+--------------------------------------------------------------------------
| Variable_name | Value | Content
+------------------------------------------+------------------------+--------------------------------------------------------------------------
| slow_query_log | ON |打开慢查询,默认为关闭OFF
| long_query_time | 1.000000 |定义慢查询时间,执行时间超过1s的sql才会记录到slow log
| log_output | FILE |定义日志(general_log and slow_log)存放方式,FILE/TABLE/NONE
| slow_query_log_file | D:\mysql\data\slow.log |慢日志存放的文件
| log_queries_not_using_indexes | OFF |5.6.5版本之后新增,记录任何不使用索引的sql
| log_throttle_queries_not_using_indexes | 0 |5.6.5版本之后新增,用来限制相同sql每分钟写slow log的频率,默认0,不限制
| log_slow_admin_statements | OFF |5.6.11版本后新增,记录执行慢的管理操作,如ALTER/CREATE INDEX/ANALYZE TABLE
| min_examined_row_limit | 0 |sql返回值小于设置的值则不记录到slow log,可设置为100
| log_slow_slave_statements | OFF |在从服务器开启慢查询日志
+------------------------------------------+------------------------+--------------------------------------------------------------------------

MySQL 自带慢 sql 分析工具 mysqldumpslow,默认在 MySQL/bin 目录下,可以通过控制台命令处理解析慢 sql 日志文件