欢迎使用 MySQL 慢查询日志分析工具

这是一个强大的工具,可以帮助您分析和优化 MySQL 数据库的性能。通过分析慢查询日志,您可以:

性能分析

  • 识别执行时间最长的查询
  • 分析查询执行计划
  • 发现潜在的性能瓶颈

数据可视化

  • 查询时间分布热力图
  • 慢查询统计信息
  • 直观的数据展示

便捷功能

  • 支持拖拽上传日志文件
  • 数据筛选和搜索
  • 导出分析结果

方式一:命令行设置(临时生效)

# 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';

# 设置慢查询日志文件位置
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';

# 设置慢查询阈值(单位:秒)
SET GLOBAL long_query_time = 1;

# 记录未使用索引的查询
SET GLOBAL log_queries_not_using_indexes = 'ON';

方式二:配置文件设置(永久生效)

在 my.cnf 配置文件中添加:

[mysqld]
# 开启慢查询日志
slow_query_log = 1

# 设置慢查询日志文件位置
slow_query_log_file = /var/log/mysql/slow.log

# 设置慢查询阈值(单位:秒)
long_query_time = 1

# 记录未使用索引的查询
log_queries_not_using_indexes = 1

# 每分钟允许记录到慢查询日志的未使用索引的查询次数
log_throttle_queries_not_using_indexes = 60

日志格式说明

# Time: 2024-03-16T16:04:53.000000Z
# User@Host: root[root] @ localhost []
# Query_time: 4.809013  Lock_time: 0.000012  Rows_sent: 41325  Rows_examined: 169750
# Schema: db_name
SET timestamp=1710605093;
SELECT * FROM information_schema.tables;
  • Time:查询执行的时间戳
  • User@Host:执行查询的用户和主机信息
  • Query_time:查询执行时间(单位:秒)
  • Lock_time:等待锁的时间(单位:秒)
  • Rows_sent:返回给客户端的行数
  • Rows_examined:扫描的行数
  • Schema:使用的数据库名
  • SET timestamp:查询执行的 UNIX 时间戳
  • 具体的 SQL 语句

1. 使用 MySQL 自带工具

# 分析慢查询日志
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log

参数说明:
-s:排序方式
    t - 按查询时间排序
    c - 按执行次数排序
    l - 按锁定时间排序
    r - 按返回记录数排序
-t:返回前几条记录
-g:使用正则表达式匹配

2. 直接查看慢查询日志

# 查看最新的慢查询
tail -f /var/log/mysql/slow.log

# 统计慢查询数量
cat /var/log/mysql/slow.log | grep "# Time:" | wc -l

1. 索引优化

  • 为常用查询条件创建合适的索引
  • 避免索引失效的情况:
    • 避免在索引列上使用函数或运算
    • 避免使用前缀模糊查询(like '%xxx')
    • 避免对索引列进行类型转换
  • 合理使用复合索引,遵循最左前缀原则

2. 查询优化

  • 只查询需要的列,避免 SELECT *
  • 限制结果集大小,使用 LIMIT
  • 优化 JOIN 查询:
    • 小表驱动大表
    • 为关联字段创建索引
    • 避免过多表关联
  • 合理使用子查询,必要时改写为 JOIN

3. EXPLAIN 分析

# 使用 EXPLAIN 分析 SQL 执行计划
EXPLAIN SELECT * FROM table_name WHERE condition;

重点关注以下字段:

  • type:访问类型,从好到差:system > const > eq_ref > ref > range > index > ALL
  • key:实际使用的索引
  • rows:预计扫描的行数
  • Extra:额外信息,如 Using filesort、Using temporary 等都需要优化
下载商城系统慢查询日志样例
拖拽文件到此处或 点击上传
{{ logData.length }}
总查询数
{{ averageQueryTime }}
平均查询时间(秒)
{{ maxQueryTime }}
最长查询时间(秒)
{{ averageRowsExamined }}
平均扫描行数
清空筛选
{{ currentSqlDetail.query_time }}s
查询时间
{{ currentSqlDetail.lock_time }}s
锁定时间
{{ currentSqlDetail.rows_sent }}
返回行数
{{ currentSqlDetail.rows_examined }}
扫描行数

执行时间:{{ formatDate(currentSqlDetail.date) }}

数据库:{{ currentSqlDetail.db_name }}

用户:{{ currentSqlDetail.user_host }}

{{ currentSqlDetail.query_string }}
点击"开始分析"按钮,使用AI对SQL进行分析并生成优化建议

性能分析

{{ item }}

索引建议

{{ item }}

优化建议

{{ item }}