首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL日志之慢查询日志Slow Log

MySQL日志之慢查询日志Slow Log

原创
作者头像
晚上不吃饭了
发布2025-05-12 23:55:24
发布2025-05-12 23:55:24
1.2K0
举报
文章被收录于专栏:数据库数据库

MySQL 慢查询日志 (Slow Query Log) 详解

一、慢查询日志概述

慢查询日志是MySQL提供的用于记录执行时间超过指定阈值的SQL语句的日志功能,是数据库性能优化的核心工具之一。 大白话就是,查询语句超过一定时间没有结果返回,就会将查询语句记录到日志中。

二、核心作用与功能

  1. 性能问题定位:识别执行效率低下的SQL语句
  2. SQL优化依据:提供真实的SQL执行性能数据
  3. 系统监控:监控数据库长期性能变化趋势
  4. 索引优化:发现缺失或无效的索引使用情况

三、工作机制

  1. 记录时机:SQL执行完成后记录(与general log不同)
  2. 记录内容
    • 执行时间超过阈值的SQL
    • 执行参数(时间、锁时间、返回行数等)
    • 用户和连接信息
  3. 触发条件:满足以下任一条件
    • 执行时间 > long_query_time
    • 未使用索引且min_examined_row_limit达到阈值
    • 管理语句慢查询(需单独开启)

四、配置方式

1. 配置文件设置(永久生效)

代码语言:javascript
复制
[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

2. 动态设置(无需重启)

代码语言:javascript
复制
-- 开启慢查询日志
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、常用配置示例:

代码语言:javascript
复制
-- 开启慢查询日志
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

功能作用: 当启用时,慢查询日志会额外记录以下重要信息:

  • 查询使用的线程ID
  • 查询检查的行数(rows_examined)
  • 查询返回的行数(rows_sent)
  • 查询读取的行数(rows_affected)
  • 查询执行的用户
  • 查询的hostname
  • 查询的应用程序名称(如果通过客户端指定)

六、优缺点分析

优点:

  1. 精准定位:准确识别性能瓶颈SQL
  2. 执行详情:记录执行时间、锁时间等关键指标
  3. 灵活配置:可调整阈值和记录条件
  4. 优化依据:提供真实的SQL执行数据

缺点:

  1. 性能开销:记录日志有约3-5%性能损耗
  2. 日志管理:需要定期清理和轮转
  3. 分析门槛:需要专业知识解读日志
  4. 阈值局限:可能遗漏短时高频问题SQL

七、慢查询日志分析

1. 日志格式示例

代码语言:javascript
复制
# 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';

2. 关键字段说明

  • Query_time:SQL执行总时间(秒)
  • Lock_time:等待锁的时间(秒)
  • Rows_sent:返回给客户端的行数
  • Rows_examined:服务器检查的行数

八、分析工具推荐

1. mysqldumpslow(官方工具)

代码语言:javascript
复制
# 统计最慢的10个查询
mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log

# 统计出现次数最多的慢查询
mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log

2. pt-query-digest(Percona Toolkit)

代码语言:javascript
复制
# 生成完整分析报告
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.log

3. 可视化工具

  • Percona PMM:企业级监控方案
  • VividCortex:SaaS性能分析平台
  • MySQL Enterprise Monitor:官方监控工具

九、慢查询优化

EXPLAIN分析:对慢SQL执行EXPLAIN查看执行计划

代码语言:javascript
复制
EXPLAIN SELECT * FROM large_table WHERE unindexed_column = 'value';

索引优化:

  • 为WHERE条件列添加索引
  • 优化复合索引顺序
  • 避免索引失效场景

SQL重写:

  • 简化复杂查询
  • 避免SELECT *
  • 优化JOIN操作

架构优化:

  • 考虑读写分离
  • 引入缓存层
  • 数据分片

十、生产环境建议

1、阈值设置: 初始建议0.5-1秒,根据业务调整 2、日志轮转: 配置logrotate防止磁盘占满 3、定期分析: 建议每周分析慢查询趋势 4、安全注意: 日志可能包含敏感信息,需设置适当权限

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL 慢查询日志 (Slow Query Log) 详解
    • 一、慢查询日志概述
    • 二、核心作用与功能
    • 三、工作机制
    • 四、配置方式
      • 1. 配置文件设置(永久生效)
      • 2. 动态设置(无需重启)
    • 五、核心参数详解
      • 补充说明:
    • 六、优缺点分析
      • 优点:
      • 缺点:
    • 七、慢查询日志分析
      • 1. 日志格式示例
      • 2. 关键字段说明
    • 八、分析工具推荐
      • 1. mysqldumpslow(官方工具)
      • 2. pt-query-digest(Percona Toolkit)
      • 3. 可视化工具
    • 九、慢查询优化
      • EXPLAIN分析:对慢SQL执行EXPLAIN查看执行计划
      • 索引优化:
      • SQL重写:
      • 架构优化:
    • 十、生产环境建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档