在 MySQL 中查看进程(连接)状态,可以使用 SHOW PROCESSLIST 或 SHOW FULL PROCESSLIST 命令,这两个命令能帮助你监控当前数据库的连接情况、执行的 SQL 语句等信息,常用于排查连接拥堵、慢查询等问题。
该命令会返回当前所有连接到 MySQL 服务器的进程信息,包含以下关键字段:
-
Id:进程(连接)的唯一标识 ID(终止进程时需要用到)
-
User:发起该进程的数据库用户名
-
Host:连接来源的主机(格式为 IP:端口)
-
db:当前连接操作的数据库名(若未指定则为 NULL)
-
Command:进程状态(如 Sleep 表示空闲、Query 表示正在执行查询、Connect 表示正在连接等)
-
Time:进程持续时间(单位:秒)
-
State:进程当前的具体状态(如 executing 表示正在执行 SQL)
-
Info:正在执行的 SQL 语句(长语句会被截断)
如果需要查看完整的 SQL 语句(避免被截断),使用:
与 SHOW PROCESSLIST 的区别是:Info 字段会显示完整的 SQL 内容,适合分析长查询。
可以结合 WHERE 条件筛选特定进程,例如:
SHOW FULL PROCESSLIST WHERE Time > 30;
SHOW PROCESSLIST WHERE User = 'app_user';
SHOW FULL PROCESSLIST WHERE Command = 'Query';
SHOW PROCESSLIST WHERE db = 'order_db';
如果发现某个进程长时间阻塞、占用资源过高或执行异常,可以通过 KILL 命令终止它:
-
权限限制:普通用户只能查看自己发起的进程,
root 等管理员用户可以查看所有进程。
-
Sleep 状态过多:若大量进程处于 Sleep 状态(超过连接池配置),可能是应用程序未正确关闭连接,需检查连接池设置。
-
锁等待:若
State 显示 Waiting for table lock 或 Locked,表示进程正在等待锁,需排查锁冲突(可结合 SHOW ENGINE INNODB STATUS 进一步分析)。
通过这些命令,能有效监控 MySQL 的连接状态,及时发现并处理异常情况。