如何监控当前正在执行的SQL进程_SHOW PROCESSLIST

张开发
2026/4/10 13:19:01 15 分钟阅读

分享文章

如何监控当前正在执行的SQL进程_SHOW PROCESSLIST
SHOW PROCESSLIST 返回当前时刻正在运行或空闲的客户端连接线程快照每行含Id、User、Host、db、Command、Time、State、Info字段其中Info默认截断为100字符。SHOW PROCESSLIST 返回的是什么数据show processlist 是 mysql 提供的实时会话快照不是历史记录也不是持续流。它只返回当前时刻正在运行或空闲的连接线程每行代表一个客户端连接包含 id、user、host、db、command、time、state、info 这些字段。其中 info 列最值得关注——它显示该线程正在执行或最后执行的 sql 语句但默认会被截断为 100 字符如果语句更长就看不到完整内容。怎么看到完整的 SQL 语句直接执行 SHOW PROCESSLIST 看不到长 SQL 的全貌必须用 SHOW FULL PROCESSLIST。注意是 FULL不是 full大小写不敏感但拼写不能错。这个命令不会增加开销只是把 Info 列长度拉到最大默认 1MB适合排查被截断的慢查询或动态拼接 SQL。SHOW PROCESSLIST 和 SHOW FULL PROCESSLIST 权限要求一样都需要 PROCESS 权限普通用户只能看到自己的线程只有 SUPER 或 CONNECTION_ADMIN 权限才能看到全部在 MySQL 8.0 中推荐查 performance_schema.threads 表它比 SHOW PROCESSLIST 更稳定、字段更全且不受 max_allowed_packet 影响为什么有时候查不到正在跑的 SQL常见原因不是命令没用而是 SQL 执行太快、已经结束或者根本没进“执行态”。比如语句处于 init、starting、checking permissions 等初始化阶段Info 可能为空SQL 已完成线程回到 Sleep 状态Info 清空只剩连接信息使用了连接池如 HikariCP实际执行的线程和你看到的 Host 不一致真实 SQL 可能在应用日志里开启了 log_slow_verbosityfull 但没开 long_query_time0导致短于阈值的语句不进慢日志又没卡在 PROCESSLIST 里监控时容易忽略的两个细节一是 Time 字段单位是秒但它表示的是“当前状态持续时间”不是 SQL 总耗时。比如一个 State 为 Sending data 的线程Time120说明它卡在这个状态 2 分钟了未必是整条 SQL 跑了 2 分钟。 Felvin AI无代码市场只需一个提示快速构建应用程序

更多文章