MySQL的show full processlist命令

來源:互聯網
上載者:User

  如果資料庫慢了,想要看看mysql正在幹什麼,可以執行這個語句,可以列出mysql當前串連在執行的sql語句。  

Id    User
Host db    Command       Time       State       Info

2599      
oa    SVCTAG-91FFF2X:3726      penguin  
Sleep       7321              <null>

2956      
rw_penguin   
SVCTAG-6HKDF2X:5481    
penguin   Sleep       2293              <null>

2957      
rw_penguin   
CYSY-DL580-2:3925     penguin   Sleep      
2162              <null>

2963      
rw_penguin   
CYSY-DL580-2:4122     penguin   Sleep      
2162              <null>

2965      
rw_penguin   
CYSY-DL580-2:4270     penguin   Sleep      
2162              <null>

  ………………………………………………………………

  以下內容摘自手冊

  SHOW PROCESSLIST顯示哪些線程正在運行。您也可以使用mysqladmin
processlist語句得到此資訊。如果您有SUPER許可權,您可以看到所有線程。否則,您只能看到您自己的線程(也就是,與您正在使用的MySQL賬戶相關的線程)。如果您不使用FULL關鍵詞,則只顯示每個查詢的前100個字元。

  本語句報告TCP/IP串連的主機名稱(採用host_name:client_port格式),以方便地判定哪個用戶端正在做什麼。

  如果您得到“too many connections”錯誤資訊,並且想要瞭解正在發生的情況,本語句是非常有用的。MySQL保留一個額外的串連,讓擁有SUPER許可權的賬戶使用,以確保管理員能夠隨時串連和檢查系統(假設您沒有把此許可權給予所有的使用者)。

  在來自SHOW PROCESSLIST的輸出中常見的一些狀態:

  · 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,並正在等待所有線程,以關閉表。

  · FULLTEXT initialization

  伺服器正在準備執行一個自然語言全文本搜尋。

  · Killed

  有人已經向線程發送了一個KILL命令。在下一次檢查終止標記時,應放棄。該標記在MySQL的每個大迴圈中都檢查,但是在有些情況下,線程終止只需要較短的時間。如果該線程被其它線程鎖定,則只要其它線程接觸鎖定,終止操作就會生效。

  · 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

  修複代碼正在通過關金鑰快取一個接一個地使用建立關鍵字。這比通過分類修複要慢很多。

  · 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或以下語句之一:FLUSH
TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE或OPTIMIZE
TABLE;則會出現通知。

  · waiting for handler insert

  INSERT DELAYED管理程式已經處理了所有處於等待狀態的插入,並正在等待新插入。

  多數狀態對應於非常快的操作。如果一個線程在這些狀態下停留了數秒,則可能是有問題,需要進行調查。

  有一些其它的狀態,在前面的清單中沒有提及,但是其中有很多狀態對於尋找伺服器中的程式錯誤是有用的。

  從這裡可以看到是不是有表鎖死了,是不是有些語句執行了很久,甚至可以通過kill id 語句滅了搗亂的串連。

 

參考:http://tech.it168.com/a2009/0526/577/000000577940.shtml

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.