Show processlist 狀態分析

2021-09-01 17:43:48 字數 2236 閱讀 7873

[size=large][color=red]θ sleep狀態[/color][/size]

[size=medium]√ 通常代表資源未釋放,如果是通過連線池,sleep狀態應該恆定在一定數量範圍內

√ 實戰範例:因前端資料輸出時(特別是輸出到使用者終端)未及時關閉資料庫連線,導致因網路連線速度產生大量sleep連線,在網速出現異常時,資料庫too many connections掛死。

√ 簡單解讀,資料查詢和執行通常只需要不到0.01秒,而網路輸出通常需要1秒左右甚至更長,原本資料連線在0.01秒即可釋放,但是因為前端程式未執行close操作,直接輸出結果,那麼在結果未展現在使用者桌面前,該資料庫連線一直維持在sleep狀態![/size]

[size=large][color=red]θ waiting for net, reading from net, writing to net[/color][/size]

[size=medium]√ 偶爾出現無妨

√ 如大量出現,迅速檢查資料庫到前端的網路連線狀態和流量

√ 案例:因外掛程式,內網資料庫大量讀取,內網使用的百兆交換迅速爆滿,導致大量連線阻塞在waiting for net,資料庫連線過多崩潰[/size]

[size=large][color=red]θ locked狀態[/color][/size]

[size=medium]√ 有更新操作鎖定

√ 通常使用innodb可以很好的減少locked狀態的產生,但是切記,更新操作要正確使用索引,即便是低頻次更新操作也不能疏忽。如上影響結果集範例所示。

√ 在myisam的時代,locked是很多高併發應用的噩夢。所以mysql官方也開始傾向於推薦innodb。[/size]

[color=red][size=large]θ copy to tmp table[/size][/color]

[size=medium]√ 索引及現有結構無法涵蓋查詢條件,才會建立乙個臨時表來滿足查詢要求,產生巨大的恐怖的i/o壓力。

√ 很可怕的搜尋語句會導致這樣的情況,如果是資料分析,或者半夜的週期資料清理任務,偶爾出現,可以允許。頻繁出現務必優化之。

√ copy to tmp table通常與連表查詢有關,建議逐漸習慣不使用連表查詢。

實戰範例:

某社群資料庫阻塞,求救,經查,其伺服器存在多個資料庫應用和**,其中乙個不常用的小**資料庫產生了乙個恐怖的copy to tmp table操作,導致整個硬碟i/o和cpu壓力超載。kill掉該操作一切恢復。[/size]

[size=large][color=red]θ sending data[/color][/size]

[size=medium]sending data並不是傳送資料,別被這個名字所欺騙,這是從物理磁碟獲取資料的程序,如果你的影響結果集較多,那麼就需要從不同的磁碟碎片去抽取資料,

√ 偶爾出現該狀態連線無礙。

√ 回到上面影響結果集的問題,一般而言,如果sending data連線過多,通常是某查詢的影響結果集過大,也就是查詢的索引項不夠優化。

√ 如果出現大量相似的sql語句出現在show proesslist列表中,並且都處於sending data狀態,優化查詢索引,記住用影響結果集的思路去思考。[/size]

[color=red][size=large]θ storing result to query cache[/size][/color]

[size=medium]√ 出現這種狀態,如果頻繁出現,使用set profiling分析,如果存在資源開銷在sql整體開銷的比例過大(即便是非常小的開銷,看比例),則說明query cache碎片較多

√ 使用flush query cache可即時清理,也可以做成定時任務

√ query cache引數可適當酌情設定。[/size]

[size=large][color=red]θ freeing items[/color][/size]

[size=medium]√ 理論上這玩意不會出現很多。偶爾出現無礙

√ 如果大量出現,記憶體,硬碟可能已經出現問題。比如硬碟滿或損壞。

√ i/o壓力過大時,也可能出現free items執行時間較長的情況。[/size]

[size=large][color=red]θ sorting for …[/color][/size]

[size=medium]√ 和sending data類似,結果集過大,排序條件沒有索引化,需要在記憶體裡排序,甚至需要建立臨時結構排序。[/size]

[size=large][color=red]θ 其他[/color][/size]

show processlist 命令詳解

如果有super 許可權,則可以看到全部的執行緒,否則,只能看到自己發起的執行緒 這是指,當前對應的 mysql 帳戶執行的執行緒 mysql show processlist id user host db command time state info 207 root 192.168.0.2 ...

show processlist的命令介紹

如果有 super 許可權,則可以看到全部的執行緒,否則,只能看到自己發起的執行緒 這是指,當前對應的 mysql 帳戶執行的執行緒 mysql show processlist id user host db command time state info 207 root 192.168.0.2...

分狀態的樹狀陣列hdu 4267

我們用tree v k mod 來表示樹狀陣列的狀態。假如a b c k,那麼用樹狀陣列,區間更新,update b,a k,k,c update a 1,a k,k,c 就可以了 也就是說,區間 1,b 內每個ui k mod 那麼ui 的值就加c 然後 1,a 1 區間內每乙個ui c,於是就完...