touch /var/lib/mysql/data/log.txt(按實際 datadir 調整)my.ini/my.cnf,在 [mysqld] 區段添加:log=/var/lib/mysql/data/log.txtservice mysqld restart之後所有 SQL(含 SELECT)將追加寫入該文件,tail -f log.txt 可實時監控。
| 列 | 含義 |
|---|---|
| Id | 線程 ID,KILL id 終止 |
| User | 發起用戶,非 root 僅見自己線程 |
| Host | 客戶端 IP:端口,可追蹤來源 |
| db | 當前庫 |
| Command | Sleep/Query/Connect 等 |
| Time | 當前狀態持續秒數 |
| State | SQL 執行細粒度狀態(關鍵) |
| Info | SQL 文本(截斷顯示) |
Locked:被鎖,檢查長事務、未提交、表鎖Sending data:正常發送結果集Copying to tmp table on disk:臨時表超內存落盤,調大 tmp_table_sizeSorting for order/group:排序耗時,檢查索引、調大 sort_buffer_sizeWaiting for tables:表結構變更等待,DDL 操作影響Sleep:連接空閒等待請求,連接池配置問題System lock:外部系統鎖,可 --skip-external-locking經驗則:某線程保持同一 State 超過數秒,通常意味著問題,需結合 Info 的 SQL 進一步 EXPLAIN 分析。
cd /usr/local/mysql/bin
mysqladmin -uroot -p processlist
無需登錄交互模式,腳本調用更方便。