最常用方式是执行SHOW FULL PROCESSLIST,可一次性列出所有非Sleep连接且不截断SQL;但默认仅显示前100行,普通用户只能见自身连接,需PROCESS或SUPER权限才能查看全部,INFO为NULL时需结合User、Host、State、Time推测问题。

直接执行 SHOW FULL PROCESSLIST 是最常用方式
它能一次性列出所有非 Sleep 状态的连接,且不截断 SQL 语句。但注意:默认只显示前 100 行,且普通用户只能看到自己发起的连接;要查全部,必须有 PROCESS 或 SUPER 权限。
常见错误现象:Access denied; you need (at least one of) the PROCESS privilege(s) —— 这说明账号权限不足,不是命令写错。
- 加
FULL关键字才能看到完整INFO字段,否则长查询(比如带大量IN列表或 JSON 拼接的语句)会被截成SELECT * FROM orders WHERE id IN (1, 2, 3... - 如果执行后
INFO列大量为NULL,说明你没权限看别人会话的 SQL,此时只能靠User、Host、State和Time组合推测 -
Time字段单位是秒,但它只记录线程处于当前Command状态的时间,不是整条 SQL 总耗时 —— 比如事务里刚执行完第 2 条语句,Time才从这条开始计
用 information_schema.PROCESSLIST 表做精准过滤
比命令行输出更适合脚本化和监控,也更容易排除干扰项。它天然不截断字段内容(只要原始 SQL 没超 MySQL 行长度限制),而且支持 WHERE、ORDER BY、COUNT(*) 等操作。
典型使用场景:
- 查真正干活的连接数:
SELECT COUNT(*) FROM information_schema.PROCESSLIST WHERE COMMAND != 'Sleep'; - 找卡在锁上的查询:
SELECT * FROM information_schema.PROCESSLIST WHERE STATE = 'Waiting for table metadata lock' OR STATE = 'Locked'; - 排查空闲连接是否异常:
SELECT ID, USER, HOST, TIME FROM information_schema.PROCESSLIST WHERE COMMAND = 'Sleep' AND TIME > 300;
注意:information_schema.PROCESSLIST 不支持索引,高并发下频繁查询可能轻微拖慢 performance_schema,但日常诊断完全没问题。
Threads_running 和 Threads_connected 的区别必须分清
很多人误把 SHOW STATUS LIKE 'Threads_connected' 当作“活跃连接数”,其实它包含已断开但尚未被回收的僵尸连接,甚至包括刚建连还没发任何请求的 Connect 状态线程。
真正反映负载压力的是 Threads_running —— 它接近当前正在执行任务的线程数。但这个值仍是瞬时快照,没法告诉你谁在跑什么。
-
Threads_connected偏高?先检查应用是否用了短连接却没调mysql_close()或连接池maxIdle配得太小 -
Threads_running长期 > 50,但Queries增速缓慢 → 大概率是锁争用或磁盘 IO 卡住,不是 CPU 瓶颈 - 这两个值都看不到具体 SQL,定位不到根因,仅适合做趋势观察
权限不够时的替代方案:用 performance_schema.threads
MySQL 5.7+ 默认开启 performance_schema,它的 threads 表不受用户权限隔离限制,即使普通账号也能查到所有线程基础信息(不含 SQL 内容)。
执行:SELECT THREAD_ID, PROCESSLIST_USER, PROCESSLIST_HOST, PROCESSLIST_DB, PROCESSLIST_COMMAND, PROCESSLIST_STATE FROM performance_schema.threads WHERE PROCESSLIST_ID IS NOT NULL;
优势在于能看到更底层的字段,比如 thread_os_id(可关联系统级 top -H 排查 CPU 占用),缺点是 PROCESSLIST_INFO 字段对非自身会话仍为空,无法替代 SHOW FULL PROCESSLIST 查 SQL。
容易被忽略的一点:某些旧版本(如 5.6)需要手动在配置文件中启用 performance_schema=ON,否则查出来是空的。


















