You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级MySQL至5.7后SHOW FULL PROCESSLIST无法显示全部活跃进程

MySQL 5.7.38升级后SHOW FULL PROCESSLIST无法显示部分慢查询的原因及解决办法

可能的原因

  • 短连接或连接池复用场景:如果后端用短连接,查询执行完毕后连接直接关闭,对应线程销毁,不会出现在PROCESSLIST中;若使用连接池,查询结束后连接被立刻复用,线程状态切换为sleep,容易被忽略。
  • Performance Schema与传统PROCESSLIST的行为差异:MySQL 5.7默认启用Performance Schema,部分场景下SHOW FULL PROCESSLIST仅展示连接线程的基础状态,无法捕获已进入执行阶段但未在传统线程模型中暴露的查询。
  • 5.7版本PROCESSLIST的兼容性变更:MySQL 5.7对SHOW FULL PROCESSLIST和INFORMATION_SCHEMA.PROCESSLIST的实现做了调整,针对InnoDB事务内的查询、快速终止的查询(如应用主动中断),可能不会被列表捕获。
  • processlist_timeout阈值限制:若慢查询实际执行时间短于processlist_timeout默认的10秒,线程信息可能被快速清理,导致查询时看不到。

解决配置及排查方法

  • 改用Performance Schema查询线程与执行信息
    1. 确认Performance Schema已启用:
      SHOW VARIABLES LIKE 'performance_schema';
      
      若值为OFF,在AWS RDS参数组中设置performance_schema = ON并重启实例。
    2. 查询完整的线程及当前执行语句:
      -- 查看所有活跃线程
      SELECT * FROM performance_schema.threads WHERE PROCESSLIST_ID IS NOT NULL;
      -- 查看指定线程的当前执行语句
      SELECT * FROM performance_schema.events_statements_current WHERE THREAD_ID = <目标线程ID>;
      
      这两个表能捕获SHOW FULL PROCESSLIST遗漏的查询,包括刚执行完、处于事务中的语句。
  • 调整兼容与超时参数
    • 启用5.6兼容模式:在参数组中设置show_compatibility_56 = ON,让SHOW FULL PROCESSLIST行为和5.6版本一致,避免版本变更导致的显示差异。
    • 调大processlist_timeout:执行SHOW VARIABLES LIKE 'processlist_timeout';,若当前值过小,可调整为60秒左右,延长线程信息的保留时间(注意不要过大导致内存占用过高)。
  • 开启慢查询日志(最可靠的排查方式)
    在AWS RDS参数组中配置以下参数:
    slow_query_log = ON
    long_query_time = 1  # 记录执行时间超过1秒的查询,可按需调整
    log_queries_not_using_indexes = ON  # 可选,记录未使用索引的查询
    
    慢查询日志会完整记录所有符合条件的查询,不受PROCESSLIST的限制,是排查升级后索引误用问题的核心手段。
  • 过滤PROCESSLIST中的睡眠线程
    执行以下语句仅查看活跃查询线程:
    SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND != 'Sleep';
    

内容的提问来源于stack exchange,提问作者Philipp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 02:40:08