在 MySQL 中,可以通過查看進(jìn)程(連接)來了解當(dāng)前數(shù)據(jù)庫的連接狀態(tài)、執(zhí)行的 SQL 語句等信息,常用于排查連接過多、慢查詢等問題。
-
該命令會顯示當(dāng)前所有連接到 MySQL 服務(wù)器的進(jìn)程信息,包括:
-
Id:連接 ID(殺死進(jìn)程時需要用到)
-
User:執(zhí)行該進(jìn)程的用戶名
-
Host:連接來源的主機(jī)(IP: 端口)
-
db:當(dāng)前連接的數(shù)據(jù)庫
-
Command:進(jìn)程狀態(tài)(如 Sleep、Query、Connect 等)
-
Time:進(jìn)程持續(xù)時間(秒)
-
State:進(jìn)程當(dāng)前狀態(tài)(如 executing 表示正在執(zhí)行)
-
Info:執(zhí)行的 SQL 語句(長語句會被截斷)
-
與
SHOW PROCESSLIST 類似,但 Info 字段會顯示完整的 SQL 語句,適合查看長查詢。
SHOW PROCESSLIST WHERE User = 'test';
SHOW PROCESSLIST WHERE Time > 60;
SHOW FULL PROCESSLIST WHERE Command = 'Query';
如果發(fā)現(xiàn)某個進(jìn)程長時間阻塞或占用資源過多,可以終止它:
-
執(zhí)行
SHOW PROCESSLIST 需要 PROCESS 權(quán)限,普通用戶只能看到自己的連接,管理員(如 root)可以看到所有連接。
-
大量的
Sleep 狀態(tài)進(jìn)程可能表示連接未被正確關(guān)閉,需檢查應(yīng)用程序的連接池配置。
-
若
State 字段顯示 Locked,可能表示該進(jìn)程正在等待鎖,需進(jìn)一步排查鎖沖突問題。
通過這些命令,可以有效監(jiān)控 MySQL 的連接狀態(tài),及時發(fā)現(xiàn)并處理異常進(jìn)程。