当前位置: 首页 > news >正文

MySQL慢查询日志分析方法

慢查询是什么?

  • 慢查询就是执行耗时的SQL,然后记录到日志文件里,方便进行分析
  • MySQL 慢查询日志(Slow Query Log)是优化数据库性能的重要工具,它记录执行时间超过指定阈值或未使用索引的 SQL 语句。以下是分析慢查询日志的完整流程:
  • 文章已经整理成PDF电子书,喜欢的朋友可以转存以下,方便查看:https://pan.quark.cn/s/f52968c518d3

1. 启用慢查询日志

配置参数(在 my.cnfmy.ini 中):

[mysqld]
slow_query_log = 1                  # 启用慢查询日志
slow_query_log_file = /path/to/slow.log  # 日志文件路径
long_query_time = 2                 # 记录执行时间超过2秒的查询(单位:秒)
log_queries_not_using_indexes = 1   # 记录未使用索引的查询

重启 MySQL 服务使配置生效。


2. 查看慢查询日志

方式 1:直接查看日志文件

tail -f /path/to/slow.log

方式 2:使用内置工具 mysqldumpslow

# 按总执行时间排序
mysqldumpslow -s t /path/to/slow.log# 按出现次数排序
mysqldumpslow -s c /path/to/slow.log# 按锁定时间排序
mysqldumpslow -s l /path/to/slow.log

方式 3:使用 Percona Toolkit(推荐)

pt-query-digest /path/to/slow.log > analysis.txt

生成的分析报告会汇总高耗时 SQL、执行频率、索引使用情况等。


3. 分析关键指标

(1) 高执行时间 SQL

• 检查 Query_time 字段,定位耗时最长的查询。

• 关注 Lock_time(锁等待时间)是否过高。

(2) 高频查询

• 统计重复出现的 SQL,高频慢查询对系统影响更大。

(3) 索引缺失

• 检查是否 Rows_examined 远大于 Rows_sent,可能缺少索引。

• 用 EXPLAIN 分析执行计划:

EXPLAIN SELECT ...;

• 若 type=ALL 表示全表扫描。

• 若 key=NULL 表示未使用索引。

(4) 其他问题

• 临时表使用:Using temporary

• 文件排序:Using filesort

• 大结果集:检查 Rows_sent 是否过大。


4. 优化建议

(1) 添加索引

ALTER TABLE table_name ADD INDEX idx_column(column_name);

(2) 重写 SQL

• 避免 SELECT *,只查询必要字段。

• 优化 JOIN 操作,减少嵌套子查询。

• 分页查询使用延迟关联:

SELECT * FROM table INNER JOIN (SELECT id FROM table LIMIT 1000000, 10) AS tmp USING(id);

(3) 调整配置

• 增大 innodb_buffer_pool_size(缓存池大小)。

• 调整 tmp_table_sizemax_heap_table_size 避免磁盘临时表。

(4) 拆分大查询

• 将复杂查询拆分为多个简单步骤,分批处理数据。

(5) 表结构优化

• 对频繁查询的大表进行分区或分库分表。

• 使用合适的数据类型(如用 INT 代替 VARCHAR 存储 ID)。


5. 工具推荐

工具用途
mysqldumpslowMySQL 内置工具,快速汇总日志
pt-query-digestPercona 的高级分析工具,生成详细报告
MySQL Workbench可视化分析执行计划
Prometheus + Grafana监控数据库实时性能

6. 注意事项

  1. 性能影响:开启慢查询日志会轻微增加 I/O 压力,高并发场景慎用。
  2. 日志轮换:定期清理或归档旧日志,避免磁盘空间耗尽。
  3. 综合监控:结合 SHOW PROCESSLISTSHOW STATUS 等命令全面分析。

通过以上步骤,您可以快速定位 MySQL 性能瓶颈并针对性优化。持续监控慢查询日志是保障数据库高效运行的关键实践。

相关文章:

  • BLE技术,如何高效赋能IoT短距无线通信?
  • 应用安全系列之四十七:NoSQL注入
  • 14.外观模式:思考与解读
  • IoTDB数据库建模与资源优化指南
  • 从拒绝采样到强化学习,大语言模型推理极简新路径!
  • Tailwind CSS 实战:基于 Kooboo 构建企业官网页面(三)
  • Webshell管理工具的流量特征
  • Selenium 与 Playwright:浏览器自动化工具的深度对比
  • python jupyter notebook
  • 麒麟OS系统的Python程序和应用部署
  • 给 BBRv2/3 火上浇油的 drain-to-target
  • 使用DDR4控制器实现多通道数据读写(十)
  • Thinkphp开发自适应职业学生证书查询系统职业资格等级会员证书管理网站
  • 【PyTorch动态计算图原理精讲】从入门到灵活应用
  • react-native-vector-icons打包报错并且提示:copyReactNativeVectorIconFonts相关信息
  • 20_大模型微调和训练之-基于LLamaFactory+LoRA微调LLama3后格式合并
  • 详解大语言模型生态系统概念:lama,llama.cpp,HuggingFace 模型 ,GGUF,MLX,lm-studio,ollama这都是什么?
  • LeetCode 2302 统计得分小于K的子数组数目(滑动窗口)
  • “连接世界的桥梁:深入理解计算机网络应用层”
  • 第十六届蓝桥杯 2025 C/C++组 脉冲强度之和
  • 光明网评“泉州梦嘉商贸楼不到5年便成危楼”:监管是否尽职尽责?
  • 临港迎来鸿蒙智行“尚界”整车及电池配套项目,首款车型今秋上市
  • 怒江州委常委、泸水市委书记余剑锋调任云南省委省直机关工委副书记
  • 论法的精神︱张玉敏:知识产权保护要为社会经济文化发展服务
  • 澎湃思想周报丨数字时代的育儿;凛冬已至好莱坞
  • 我国已形成完整人工智能产业体系,专利申请量位居全球首位