MySQL的慢查询日志(Slow Query Log)可以帮助数据库管理员识别执行时间较长的SQL语句。通过分析这些慢查询,可以发现性能瓶颈并采取相应的优化措施。
启用慢查询日志,需要在MySQL配置文件(通常是my.cnf
或my.ini
)中设置相关参数,或者直接在运行时使用SET
命令来修改。
mysql> show variables like '%slow_query_log%';
+---------------------+-----------------------------------------+
| Variable_name | Value |
+---------------------+-----------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | D:\develop\...\LAPTOP-3JODIVUS-slow.log |
+---------------------+-----------------------------------------+
2 rows in set, 1 warning (0.02 sec)
mysql> show variables like '%long_query%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set, 1 warning (0.00 sec)
配置文件设置
[mysqld]
slow_query_log = 1 # 开启慢查询日志
slow_query_log_file = /path/to/your/slow-query.log # 指定日志文件路径
long_query_time = 2 # 设置阈值,默认单位是秒
log_queries_not_using_indexes = 1 # 记录没有使用索引的查询
slow_query_log
:开启慢查询日志功能。
slow_query_log_file
:指定慢查询日志文件的存储位置。
long_query_time
:定义了查询需要多长时间才被记录到慢查询日志中。默认单位是秒,也可以设置为毫秒。
log_queries_not_using_indexes
:如果设置为1,那么所有不使用索引的查询都将被记录,无论它们是否超过了long_query_time
。
运行时设置
在 MySQL 服务器运行时通过 SQL 命令临时更改设置
# 全局开启
SET GLOBAL slow_query_log = 'ON';
# 指定路径和名称
SET GLOBAL slow_query_log_file = 'D:\\slow-query-log.log';
# 调整时间阈值
SET GLOBAL long_query_time = 3;
# 记录未使用索引的查询
SET GLOBAL log_queries_not_using_indexes = 'ON';
查看和分析慢查询日志
一旦开启了慢查询日志,并且有一些慢查询被记录下来后,可以使用文本编辑器打开日志文件查看内容。通常会使用一些专门的工具来分析这些日志,例如mysqldumpslow
、pt-query-digest
(Percona Toolkit的一部分)等。
- mysqldumpslow:MySQL 自带的简单工具,可以用来汇总慢查询日志中的数据。
- pt-query-digest:更强大的工具,可以从慢查询日志中提取出详细的统计信息,并生成报告。
相关命令:
//查看慢查询日志是否开启
SHOW VARIABLES LIKE '%slow_query_log%';
//查看时间阈值:
SHOW VARIABLES LIKE 'long_query_time%';