命令“show full processlist”,可以用來查看MySQL當前線程處理情況。
- 正在執行什么語句?
- 執行語句耗時多久?
- 有慢SQL正在執行?
- 總共有多少鏈接數?
查看當前mysql是否有壓力,哪些線程有問題?可以kill掉有問題的線程,臨時解決一些突發性問題。
命令“show full processlist”輸出結果詳解:
Id : 標識Id, kill操作時會用到。
User : 連接的用戶, 如果不是root, 只顯示你權限范圍內的sql語句。
Host : 來源主機ip, 可以用來追蹤問題。
db : 連接的數據庫。
Command: 當前連接執行的命令, 一般就是休眠sleep, 查詢query, 連接connect。
Time : 當前狀態持續的時間, 單位是秒。
State :
使用當前連接的sql語句的狀態。 請注意state只是語句執行中的某一個狀態。 以查詢SQL為例, 可能需要經過copying to tmp table, Sorting result, Sending data等狀態才可以完成。
info : 顯示這個sql語句, 因為長度有限, 所以長的sql語句就顯示不全, 但是一個判斷問題語句的重要依據。
State狀態值:
Checking table:正在檢查數據表
Closing tables:
正在將表中修改的數據刷新到磁盤中, 同時正在關閉已經用完的表。
這是一個很快的操作, 否則就應該確認磁盤空間是否已滿或磁盤是否正處于重負中。
Connect Out:復制從服務器正在連接主服務器。
Copying to tmp table on disk:
由于臨時結果集大于tmp_table_size, 正在將臨時表從內存存儲轉為磁盤存儲以此節省內存。
Creating tmp table:正在創建臨時表以存放部分查詢結果。
deleting from main table:
服務器正在執行多表刪除中的第一部分, 剛刪除第一個表。
deleting from reference tables:
服務器正在執行多表刪除中的第二部分, 正在刪除其他表的記錄。
Flushing tables:正在執行 FLUSH TABLES, 等待其他線程關閉數據表。
Killed:
發送了一個kill請求給某線程, 那么這個線程將會檢查kill標志位, 同時會放棄下一個kill請求。
MySQL會在每次的主循環中檢查kill標志位, 不過有些情況下該線程可能會過一小段才能死掉。
如果該線程被其他線程鎖住了, 那么kill請求會在鎖釋放時馬上生效。
Locked:被其他查詢鎖住了。
Sending data:正在處理SELECT查詢的記錄, 同時正在把結果發送給客戶端。
Sorting for group:正在為GROUP BY做排序。
Sorting for order:正在為ORDER BY做排序。
Opening tables:
這個過程應該會很快, 除非受到其他因素的干擾。
例如, 在執行完ALTER TABLE或LOCK TABLE語句以前, 數據表無法被其他線程打開。正嘗試打開一個表。
Removing duplicates:
正在執行一個SELECT DISTINCT方式的查詢, 但是MySQL無法在前一個階段優化掉那些重復的記錄。因此, MySQL需要再次去掉重復的記錄, 然后再把結果發送給客戶端。
Reopen table:
獲得了對一個表的鎖, 但是必須在表結構修改之后才能獲得這個鎖。
已經釋放鎖, 關閉數據表, 正嘗試重新打開數據表。
Repair by sorting:
修復指令正在排序以創建索引。
Repair with keycache:
修復指令正在利用索引緩存一個一個地創建新索引。它會比 Repair by sorting 慢些。
Searching rows for update:
正在將符合條件的記錄找出來以備更新。它必須在UPDATE要修改相關的記錄之前就完成了。
Sleeping:正在等待客戶端發送新請求.
System lock:
正在等待取得一個外部的系統鎖。如果當前沒有運行多個mysqld服務器同時請求同一個表,
那么可以通過增加 --skip-external-locking參數來禁止外部系統鎖。
Upgrading lock:
INSERT DELAYED 正在嘗試取得一個鎖表以插入新記錄。
Updating:正在搜索匹配的記錄, 并且修改它們。
User Lock:正在等待 GET_LOCK()。
Waiting for tables
該線程得到通知, 數據表結構已經被修改了, 需要重新打開數據表以取得新的結構。
然后, 為了能的重新打開數據表, 必須等到所有其他線程關閉這個表。
以下幾種情況下會產生這個通知:
FLUSH TABLES tbl_name,
ALTER TABLE,
RENAME TABLE,
REPAIR TABLE,
ANALYZE TABLE,
OPTIMIZE TABLE。
waiting for handler insert:
INSERT DELAYED 已經處理完了所有待處理的插入操作, 正在等待新的請求。