程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql執行狀態分析show processlist

mysql執行狀態分析show processlist

編輯:MySQL綜合教程

mysql執行狀態分析show processlist   執行狀態分析 l Sleep狀態 n 通常代表資源未釋放,如果是通過連接池,sleep狀態應該恆定在一定數量范圍內 n 實戰范例:因前端數據輸出時(特別是輸出到用戶終端)未及時關閉數據庫連接,導致因網絡連接速度產生大量sleep連接,在網速出現異常時,數據庫too many connections掛死。 n 簡單解讀,數據查詢和執行通常只需要不到0.01秒,而網絡輸出通常需要1秒左右甚至更長,原本數據連接在0.01秒即可釋放,但是因為前端程序未執行close操作,直接輸出結果,那麼在結果未展現在用戶桌面前,該數據庫連接一直維持在sleep狀態! l Waiting for net, reading from net, writing to net n 偶爾出現無妨 n 如大量出現,迅速檢查數據庫到前端的網絡連接狀態和流量 n 案例:因外掛程序,內網數據庫大量讀取,內網使用的百兆交換迅速爆滿,導致大量連接阻塞在waiting for net,數據庫連接過多崩潰 l Locked狀態 n 有更新操作鎖定 n 通常使用innodb可以很好的減少locked狀態的產生,但是切記,更新操作要正確使用索引,即便是低頻次更新操作也不能疏忽。如上影響結果集范例所示。 n 在myisam的時代,locked是很多高並發應用的噩夢。所以mysql官方也開始傾向於推薦innodb。 l Copy to tmp table n 索引及現有結構無法涵蓋查詢條件,才會建立一個臨時表來滿足查詢要求,產生巨大的恐怖的i/o壓力。 n 很可怕的搜索語句會導致這樣的情況,如果是數據分析,或者半夜的周期數據清理任務,偶爾出現,可以允許。頻繁出現務必優化之。 n Copy to tmp table通常與連表查詢有關,建議逐漸習慣不使用連表查詢。 n 實戰范例: u 某社區數據庫阻塞,求救,經查,其服務器存在多個數據庫應用和網站,其中一個不常用的小網站數據庫產生了一個恐怖的copy to tmp table操作,導致整個硬盤i/o和cpu壓力超載。Kill掉該操作一切恢復。 l Sending data n Sending data並不是發送數據,別被這個名字所欺騙,這是從物理磁盤獲取數據的進程,如果你的影響結果集較多,那麼就需要從不同的磁盤碎片去抽取數據, n 偶爾出現該狀態連接無礙。 n 回到上面影響結果集的問題,一般而言,如果sending data連接過多,通常是某查詢的影響結果集過大,也就是查詢的索引項不夠優化。 n 如果出現大量相似的SQL語句出現在show proesslist列表中,並且都處於sending data狀態,優化查詢索引,記住用影響結果集的思路去思考。 l Storing result to query cache n 出現這種狀態,如果頻繁出現,使用set profiling分析,如果存在資源開銷在SQL整體開銷的比例過大(即便是非常小的開銷,看比例),則說明query cache碎片較多 n 使用flush query cache可即時清理,也可以做成定時任務 n Query cache參數可適當酌情設置。 l Freeing items n 理論上這玩意不會出現很多。偶爾出現無礙 n 如果大量出現,內存,硬盤可能已經出現問題。比如硬盤滿或損壞。 n i/o壓力過大時,也可能出現Free items執行時間較長的情況。 l Sorting for … n 和Sending data類似,結果集過大,排序條件沒有索引化,需要在內存裡排序,甚至需要創建臨時結構排序。 l 其他 n 還有很多狀態,遇到了,去查查資料。基本上我們遇到其他狀態的阻塞較少,所以不關心   命令: show status;   Aborted_clients 由於客戶沒有正確關閉連接已經死掉,已經放棄的連接數量。  Aborted_connects 嘗試已經失敗的MySQL服務器的連接的次數。  Connections 試圖連接MySQL服務器的次數。  Created_tmp_tables 當執行語句時,已經被創造了的隱含臨時表的數量。  Delayed_insert_threads 正在使用的延遲插入處理器線程的數量。  Delayed_writes 用INSERT DELAYED寫入的行數。  Delayed_errors 用INSERT DELAYED寫入的發生某些錯誤(可能重復鍵值)的行數。  Flush_commands 執行FLUSH命令的次數。  Handler_delete 請求從一張表中刪除行的次數。  Handler_read_first 請求讀入表中第一行的次數。  Handler_read_key 請求數字基於鍵讀行。  Handler_read_next 請求讀入基於一個鍵的一行的次數。  Handler_read_rnd 請求讀入基於一個固定位置的一行的次數。  Handler_update 請求更新表中一行的次數。  Handler_write 請求向表中插入一行的次數。  Key_blocks_used 用於關鍵字緩存的塊的數量。  Key_read_requests 請求從緩存讀入一個鍵值的次數。  Key_reads 從磁盤物理讀入一個鍵值的次數。  Key_write_requests 請求將一個關鍵字塊寫入緩存次數。  Key_writes 將一個鍵值塊物理寫入磁盤的次數。  Max_used_connections 同時使用的連接的最大數目。  Not_flushed_key_blocks 在鍵緩存中已經改變但是還沒被清空到磁盤上的鍵塊。  Not_flushed_delayed_rows 在INSERT DELAY隊列中等待寫入的行的數量。  Open_tables 打開表的數量。  Open_files 打開文件的數量。  Open_streams 打開流的數量(主要用於日志記載)  Opened_tables 已經打開的表的數量。  Questions 發往服務器的查詢的數量。  Slow_queries 要花超過long_query_time時間的查詢數量。  Threads_connected 當前打開的連接的數量。  Threads_running 不在睡眠的線程數量。  Uptime 服務器工作了多少秒。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved