慢查询日志是MySQL提供的用于记录执行时间超过指定阈值的SQL语句的日志功能,是数据库性能优化的核心工具之一。 大白话就是,查询语句超过一定时间没有结果返回,就会将查询语句记录到日志中。
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
min_examined_row_limit = 100
log_slow_admin_statements = 1
log_slow_slave_statements = 1
log_output = FILE-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
-- 设置慢查询阈值(秒)
SET GLOBAL long_query_time = 0.5;
-- 记录未使用索引的查询
SET GLOBAL log_queries_not_using_indexes = 'ON';
-- 关闭慢查询日志
SET GLOBAL slow_query_log = 'OFF';参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
slow_query_log | Boolean | OFF | 慢查询日志总开关 |
slow_query_log_file | String | hostname-slow.log | 慢查询日志文件路径 |
long_query_time | Float | 10 | 慢查询阈值(秒) |
log_queries_not_using_indexes | Boolean | OFF | 是否记录未使用索引的查询 |
min_examined_row_limit | Integer | 0 | 记录检查行数超过该值的查询 |
log_slow_admin_statements | Boolean | OFF | 是否记录慢管理语句(如ALTER/ANALYZE等) |
log_slow_slave_statements | Boolean | OFF | 是否记录从库慢查询 |
log_output | Enum | FILE | 输出目标(FILE/TABLE/NONE) |
log_throttle_queries_not_using_indexes | Integer | 0 | 每分钟允许记录到slow log的且未使用索引的SQL语句次数 |
1、单位
long_query_time 以秒为单位,支持小数(如 0.5 表示500毫秒) min_examined_row_limit 以行为单位
2、常用配置示例:
-- 开启慢查询日志
SET GLOBAL slow_query_log = ON;
-- 设置慢查询阈值为1秒
SET GLOBAL long_query_time = 1;
-- 记录未使用索引的查询
SET GLOBAL log_queries_not_using_indexes = ON;3、输出目标
FILE: 输出到日志文件(默认) TABLE: 输出到 mysql.slow_log 表 NONE: 关闭输出
4、8.0.14版本引入的参数log_slow_extra
用于控制是否在慢查询日志中记录额外的执行统计信息 参数类型为布尔型 默认值是 OFF
功能作用: 当启用时,慢查询日志会额外记录以下重要信息:
# Time: 2023-08-20T14:23:45.123456Z
# User@Host: root[root] @ localhost [] Id: 123
# Query_time: 2.345678 Lock_time: 0.000123 Rows_sent: 1 Rows_examined: 100000
SET timestamp=1234567890;
SELECT * FROM large_table WHERE unindexed_column = 'value';# 统计最慢的10个查询
mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log
# 统计出现次数最多的慢查询
mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log# 生成完整分析报告
pt-query-digest /var/log/mysql/mysql-slow.log > slow_report.txt
# 分析特定时间段的日志
pt-query-digest --since '2023-08-20 00:00:00' /var/log/mysql/mysql-slow.logEXPLAIN SELECT * FROM large_table WHERE unindexed_column = 'value';1、阈值设置: 初始建议0.5-1秒,根据业务调整 2、日志轮转: 配置logrotate防止磁盘占满 3、定期分析: 建议每周分析慢查询趋势 4、安全注意: 日志可能包含敏感信息,需设置适当权限
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。