如何分析高并发慢sql_mysql性能排查方法

10次阅读

高并发下慢 SQL 需通过慢日志 +Performance Schema 定位锁争用、索引失效等根因,结合 EXPLAIN 分析执行计划,压测验证优化效果,并同步检查应用连接池配置。

如何分析高并发慢 sql_mysql 性能排查方法

定位高并发下的慢 SQL

高并发场景下,慢 SQL 往往不是单次执行慢,而是因锁争用、连接堆积或索引失效导致“雪崩式”响应延迟。优先通过 slow_query_log 开启慢日志(建议 long_query_time ≤ 1s),并配合 log_queries_not_using_indexes = ON 捕获隐式全表扫描。注意:高并发时慢日志本身有 IO 开销,可临时开启,问题复现后及时关闭。

结合 Performance Schema 实时分析

MySQL 5.6+ 的 Performance Schema 能精准定位高并发下的资源瓶颈。重点查以下三类表:

  • events_statements_summary_by_digest:按 SQL 指纹聚合,看哪些语句执行次数多、平均延时高、锁等待时间长
  • events_waits_summary_global_by_event_name:观察 wait/synch/mutex/sql/LOCK_table、wait/io/file/innodb/innodb_data_file 等等待事件是否突增
  • session_connect_attrs + processlist:关联应用端连接信息,识别是某类接口(如下单、查询订单)集中触发慢 SQL

检查执行计划与锁行为

对高频慢 SQL,务必用 EXPLAIN FORMAT=JSON 查执行计划,重点关注:

  • type 是否为 ALL / index(全表 / 全索引扫描);key 是否为 NULL 或非预期索引
  • rows 预估扫描行数是否远超实际返回行数(说明索引区分度差或条件未走索引)
  • Extra 中出现 Using filesort / Using temporary / Using join buffer —— 高并发下极易成为瓶颈

同时在业务低峰期模拟请求,用 SELECT * FROM performance_schema.data_locks 查当前锁持有情况,确认是否存在间隙锁(gap lock)阻塞、主键缺失导致的表级锁升级等问题。

验证与压测闭环

优化后不能只看单条 SQL 变快,必须回归业务场景验证:

  • 用 sysbench 或 pt-archiver 模拟相同并发量(如 200+ 线程)、相同 QPS 压测关键 SQL
  • 对比优化前后 Threads_runningInnodb_row_lock_waitsHandler_read_rnd_next 等状态变量变化
  • 观察应用端 P95/P99 响应时间、数据库 CPU 和 IO 利用率是否同步下降

不复杂但容易忽略:很多“慢 SQL”本质是连接池配置不当(如最大连接数过小)或应用未正确释放连接,导致后续请求排队等待——排查时务必把数据库指标和应用连接池日志一起看。

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-30发表,共计1167字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources