MySQL show processlist 中 Sleep 与 Query 的比例分析-SQL

Sleep状态多不等于数据库卡顿,它仅表示连接空闲等待命令;真正需警惕的是长时间未释放的事务或未加索引的慢查询。

为什么 show processlist 里大量 Sleep 状态不等于数据库卡了

MySQL 的 Sleep 状态表示连接已建立但当前没有执行任何 SQL,它只是空闲等待新命令——这本身是正常现象,尤其在使用连接池(如 HikariCP、Druid)的 Java 应用中。Sleep 连接是否危险,取决于它的持续时间、数量与业务负载的关系。如果 Sleep 连接平均存活数小时且长期不释放,才可能指向连接未正确 close、连接池配置不合理或应用存在连接泄漏。

如何快速判断 Sleep 连接是否异常

直接查 SHOW PROCESSLIST 不够,需结合 Time 列和连接来源分析:

  • Time 值大于应用层连接超时(如 Druid 的 maxWait 或 MySQL 的 wait_timeout)仍不退出 → 检查应用是否忘记 connection.close() 或连接池未启用 testOnBorrow/testWhileIdle
  • 大量 Sleep 来自同一 IP + 同一用户 + 相同程序名(Info 为空)→ 很可能是连接池预热后未被复用,或连接池最小空闲数(minIdle)设得过高
  • Sleep 连接数持续 > 连接池最大值(maxActive / maximumPoolSize)→ 存在连接未归还,需抓取应用日志中的 JDBC 调用栈

Query 状态长时间不结束才是真问题

Query 状态代表线程正在执行 SQL,此时关注点完全不同:

  • State 显示 Sending data 或 Copying to tmp table 时间过长 → 检查是否缺少索引、是否扫描全表、是否排序/分组数据量过大
  • State 卡在 Locked 或 Waiting for table metadata lock → 表结构变更(ALTER TABLE)阻塞了查询,或长事务未提交导致 MDL 锁未释放
  • Info 字段显示的是 SELECT ... FOR UPDATE 且 Time 持续增长 → 检查事务是否遗漏 COMMIT 或存在跨服务未同步的分布式事务

用 SELECT FROM information_schema.PROCESSLIST 做量化分析

人工看 SHOW PROCESSLIST 容易漏判,建议用 SQL 统计比例:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » MySQL show processlist 中 Sleep 与 Query 的比例分析-SQL
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3998707+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3998707+
  • 本周更新: 0+
  • 最后更新: 2026-03-16