首页/新闻资讯/正文详情

7、MySQL 慢查询排查与优化实战指南

发布时间:2026/11/5 2:17:54 来源:云帆数科 栏目:资讯中心
7、MySQL 慢查询排查与优化实战指南
一、认识慢查询1.1 定义SQL 执行时间超过 long_query_time 阈值的语句会被记录到慢查询日志用于事后排查。默认值 10 秒生产建议 1 秒。log_queries_not_using_indexes 可额外抓取未走索引的语句。慢不等于错排查要找性价比最高的那条而不是最慢的那条。1.2 阈值怎么定行业参考业务类型建议阈值典型场景普通业务系统1 ~ 2 秒OA 办公、数据报表电商领域0.5 ~ 1 秒ERP销售/库存/采购、商城、医院挂号、制造业 MES专项高压业务0.1 ~ 0.5 秒证券、银行核心、保险投保理赔1.3 危害长期占用连接拖垮连接池。持锁时间久引发连锁阻塞。大事务回放慢拖出主从延迟。1.4 三种慢法类型典型成因偶发慢锁等待、统计信息抖动持续慢缺索引、写法差突发慢数据量增长、并发突增、参数变更二、慢查询日志2.1 常用命令速查SHOW VARIABLES LIKE slow_query_log; -- 是否开启 SHOW VARIABLES LIKE slow_query_log_file; -- 日志文件位置 SHOW GLOBAL STATUS LIKE Slow_queries; -- 慢查询累计数量 SET GLOBAL slow_query_log ON; -- 即时开启 SET GLOBAL long_query_time 1; -- 设置阈值秒2.2 开启三步slow_query_log 设为 ON。long_query_time 设为 1按业务场景调整。log_output 选 FILE 或 TABLE用 min_examined_row_limit 过滤小表扫描噪音。2.3 日志记录的关键字段字段含义Query_time实际执行耗时Lock_time锁等待耗时Rows_sent / Rows_examined返回行数 / 扫描行数比值越低越好另含时间戳、用户、主机等上下文信息。2.4 扩展参数log_slow_extra8.0 起记录更多指标如 Rows_affected、Bytes_sent。log_slow_admin_statements记录 DDL 等管理语句。log_slow_replica_statements从库也记录。2.5 注意事项SET GLOBAL 即时生效无需重启但需写入配置文件才能持久化。log_queries_not_using_indexes 不要盲开日志量会被放大。slow.log 持续增长需要配置轮转与定期清理。三、分析工具工具定位要点mysqldumpslow自带、轻量-s t 按总耗时排序-t 10 取前十聚合粗糙精度有限pt-query-digest生产首选按语句指纹聚合输出 95 分位与样本适合周报复盘performance_schema8.0 优先查 events_statements_summary_by_digest按 sum_timer_wait 排序取 TopN比日志实时sys schema场景化视图statements_with_full_table_scans、statements_sorting_using_temp_tables补充分析主要靠三件套——慢查询日志找慢 SQL、mysqldumpslow聚合统计、EXPLAIN看是否合理使用索引。生产环境下建议把 pt-query-digest 作为标准入口。四、EXPLAIN 执行计划4.1 核心字段字段读法id越大越先执行相同则从上到下select_type出现 DERIVED 需警惕派生表type七档访问类型见下表key / key_len实际用到的索引及参与的列数rows / filtered估算扫描量与过滤比例越小越好Extra信息量最大见 4.34.2 type 七档system、const、eq_ref、ref、range、index、ALL从左到右依次变差优秀system、const、eq_ref可接受ref、range必须优化index、ALL4.3 Extra 关键取值取值判断Using index覆盖索引好事Using index condition索引下推好事Using filesort排序未走索引需优化Using temporary用了临时表需优化Using join buffer被驱动表缺索引4.4 速查口诀type 从 const 到 ALL越左越好出现 ALL 必须优化。key 为 NULL 说明优化器没走索引。Extra 出现 filesort 或 temporary 需要优化。4.5 进阶手段EXPLAIN ANALYZE8.0.18看真实耗时与真实行数。EXPLAIN FOR CONNECTION id分析正在运行的会话。SHOW WARNINGS查看优化器改写后的语句。optimizer_trace查看成本估算过程。五、语句级剖析5.1 SHOW PROFILE 用法SET profiling 1; SHOW PROFILES; -- 列出各语句耗时 SHOW PROFILE FOR QUERY 1; -- 查看单条各阶段耗时5.2 各阶段怎么读Sending data 占大头 → 扫描行数多或回表多。Sorting result → 排序耗时。converting HEAP to MyISAM → 临时表已落盘。局限8.0 已弃用转向 performance_schema由 events_statements_history_long 逐步替代。六、索引优化6.1 建索引四原则选择性区分度在 10% 以上才有价值。覆盖性尽量覆盖查询列消除回表。顺序等值在前、范围在后、排序跟上。克制单表索引控制在 5 ~ 6 个。6.2 修复索引失效失效原因修法列上做函数运算把运算移到常量一侧隐式类型转换如 varchar 未加引号补引号或对齐列类型OR 连接无索引列拆成 UNION取反条件!、NOT IN改为正向枚举6.3 加索引前先算账回表占比过大时优化器宁可选全表扫描。索引越多写越慢且挤占 Buffer Pool。6.4 索引维护ANALYZE TABLE 更新统计信息。FORCE INDEX 只作临时救急手段。定期清理冗余索引与从未被使用的索引。七、SQL 改写7.1 深分页延迟关联子查询先用覆盖索引取主键再回表取数据。游标法条件改为 id 上一页末尾值避免 OFFSET。7.2 JOIN被驱动表的关联列必须有索引。小表驱动大表。关联字段的字符集与类型保持一致否则索引失效。7.3 子查询8.0 已有半连接semi-join自动改写一般不必手动转换。确实慢时再改写为 JOIN。7.4 通用写法大事务拆批每批约 1000 行。批量插入按 500 ~ 1000 行一批。只取需要的列不用 SELECT *。不对列包函数让索引可用。八、配置与架构层优化8.1 参数配置参数建议innodb_buffer_pool_size给到物理内存 50% ~ 70%redo 日志容量4 ~ 8G防止刷盘周期卡顿tmp_table_size调大防止临时表落盘8.2 架构手段由轻到重读写分离 → 缓存挡热点 → 归档历史数据 → 分区表 → 分库分表最后手段。8.3 MySQL 优化四方向方向内容系统层增加 CPU、内存换 SSD重点关注磁盘 IO数据库配置调整内存、连接数、日志刷盘参数让 MySQL 更合理地使用现有资源SQL 与索引建立合适索引、优化 SQL、用 EXPLAIN 分析计划架构与运维主从复制、读写分离、高可用、备份恢复、监控告警优化目标始终是三件事查询更快、运行更稳、故障更少。九、排查方法论9.1 数据库突然变慢怎么办应急响应看服务器资源CPU、内存、磁盘是否异常。看连接是否连接数过多、打满连接池。看 SQL找出执行时间长的语句。看执行计划用 EXPLAIN 分析索引与调优情况。优化改 SQL、建索引、加缓存或调整架构。一句话总结发现问题靠监控分析问题靠 EXPLAIN解决问题靠索引、SQL、配置。9.2 慢查询五步法步骤动作第一步拿到具体语句与耗时第二步EXPLAIN 看执行计划第三步对比预估 rows 与实际行数第四步定位问题类型没索引 / 回表多 / 排序差第五步改写并验证纳入监控防复发9.3 现场辅助命令SHOW PROCESSLIST; -- 查看正在执行的会话 SELECT * FROM performance_schema.data_lock_waits; -- 查看锁阻塞 SELECT * FROM information_schema.innodb_trx; -- 查看长事务十、监控与预防10.1 企业主要监控指标指标说明连接数最大连接数假设 1000超过 800 报警QPS / TPSQPS 每秒查询次数TPS 每秒完成的事务数事务 一次完整操作流程慢查询数超过阈值需告警CPU / 内存服务器资源是否够用磁盘空间与 IO磁盘是否枯竭、IO 是否变慢主从延迟从库数据是否落后于主库锁等待是否有事务互相等待导致业务卡顿10.2 上线前规范开发约束每表必须有主键。新 SQL 上线前必须通过 EXPLAIN 评审。大表变更先在预发环境压测。10.3 上线后运营慢查询数量设阈值告警。digest TopN 周报复盘。优化完成后回归观察至少一个完整业务周期。十一、典型案例案例现象解法深分页拖垮接口LIMIT 100000, 20每次扫十万行延迟关联或游标法隐式转换全表扫varchar 列查询未加引号类型对齐或修改列类型排序出现 filesortExtra 出现 Using filesort联合索引把排序列带上优化器选错索引rows 预估与实际相差十倍以上ANALYZE TABLE仍错则临时 FORCE INDEX附录、命令速查表-- 采集 SET GLOBAL slow_query_log ON; SET GLOBAL long_query_time 1; SHOW VARIABLES LIKE slow_query_log%; SHOW GLOBAL STATUS LIKE Slow_queries; -- 分析 mysqldumpslow -s t -t 10 /path/to/slow.log pt-query-digest /path/to/slow.log -- Top SQL8.0 SELECT digest_text, count_star, ROUND(sum_timer_wait/1e12, 2) AS total_sec FROM performance_schema.events_statements_summary_by_digest ORDER BY sum_timer_wait DESC LIMIT 10; -- 定位 EXPLAIN EXPLAIN ANALYZE SHOW PROCESSLIST; SELECT * FROM information_schema.innodb_trx; -- 维护 ANALYZE TABLE

相关推荐

1.顶层与底层大面积铺铜,晶振包地作用是啥 2.CAN_H,CAN_L ;RS485_A,RS485_B要差分对走线?
1.顶层与底层大面积铺铜,晶振包地作用是啥 2.CAN_H,CAN_L ;RS485_A,RS485_B要差分对走线?

这是实验室第三次培训给学弟学妹们的思考题,我也是好久没有再了解这部分知识了 刚刚去了解了一下 然后现在谈谈我的理解(如有错误,欢迎更正)1 先说顶层和底层大面积铺铜,其实铺铜也可以说是走一条很宽的线&#xff0c… · 2026/11/4 0:56:07

C++ 内存管理:new 与 delete 详解——从语法到底层 operator new 与 malloc
C++ 内存管理:new 与 delete 详解——从语法到底层 operator new 与 malloc

在 C 中,new 和 delete 是最常用的动态内存管理手段。但说不清它到底做了什么:为什么 new 会调用构造函数,而 malloc 不会?operator new 和 malloc 又是什么关系?本文从语法、语义、底层调链三个层次,把这条… · 2026/11/2 11:19:26

蓝牙技术的工作频段与基本通信原理
蓝牙技术的工作频段与基本通信原理

《蓝牙技术学习与实践》系列博客总导航 一、引言 在日常生活中,我们经常使用蓝牙耳机、蓝牙音箱、无线键盘、智能手环等设备。这些设备不需要通过网线连接,也不需要像 Wi-Fi 那样依赖无线局域网路由器,就能够在一定距离内完成数据传输。 那… · 2026/11/4 17:57:07

C# ECharts模型库:解决序列化乱码与运行时崩溃问题
C# ECharts模型库:解决序列化乱码与运行时崩溃问题

简介:这是一套专为C# MVC开发者设计的ECharts模型层建模库,解决.NET后端与前端图表库深度集成难题,显著降低数据可视化开发门槛。资源共369个文件,涵盖110个核心C#模型类(如图表配置、坐标轴、系列项等)、8… · 2026/11/5 2:17:49

企业知识库搭建指南:架构、工具与实战
企业知识库搭建指南:架构、工具与实战

1. 知识库搭建的核心价值与场景解析十年前我刚入行时,第一次听说"知识库"这个概念还以为是图书馆的数字版本。直到参与企业级文档管理系统建设才明白,真正的知识库是能让你在3秒内找到三年前某个项目的技术方案,在会议前5分钟快速调… · 2026/11/5 2:17:49

云原生AI模型版本管理:原理与实践
云原生AI模型版本管理:原理与实践

1. 云原生AI模型版本管理的核心价值在AI工程化实践中,模型版本管理正成为MLOps流程中最关键的痛点之一。我们团队在金融风控场景中曾经历过这样的困境:某次模型迭代后AUC指标意外下降5个百分点,但由于缺乏规范的版本追踪,花了整整… · 2026/11/5 2:17:48

虚拟电厂行业早报(11月4日)|贵州能源集团568万建平台,365天含3个月试运行
虚拟电厂行业早报(11月4日)|贵州能源集团568万建平台,365天含3个月试运行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 2:17:48

C#强类型ECharts图表配置模型库:告别JSON拼接
C#强类型ECharts图表配置模型库:告别JSON拼接

简介:C# For ECharts 模型层建模库是面向.NET开发者,特别是使用ASP.NET MVC框架构建数据可视化应用的中高级工程师的高效工具。它解决了在C#后端直接生成ECharts标准配置JSON的痛点,避免手动拼接、类型错配与结构维护困难等问题,显… · 2026/11/5 2:17:48

键盘与鼠标:结构原理与选购指南
键盘与鼠标:结构原理与选购指南

1. 键盘与鼠标:人机交互的核心工具键盘和鼠标作为计算机最基础的输入设备,它们的设计原理和结构直接影响着我们的工作效率和使用体验。作为一名长期与各种输入设备打交道的技术爱好者,我深刻理解选择合适设备的重要性。不同类型的键盘和鼠标在… · 2026/11/5 2:16:48

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

多智能体协作系统架构设计与实践优化
多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39

大模型系统性入门实战指南:从原理到部署微调的全链路路线
大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39

鸿蒙文件系统沙箱机制解析与开发实践
鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码