2012-08-30 178 views
53

當我在MySQL數據庫運行SHOW PROCESSLIST,我得到這樣的輸出:SHOW PROCESSLIST:睡眠

mysql> show full processlist; 

+--------+------+-----------+--------+---------+-------+-------+-----------------------+ 
| Id  | User | Host  | db  | Command | Time | State | Info     | 
+--------+------+-----------+-------+---------+-------+-------+-----------------------+ 
| 411665 | root | localhost | somedb | Sleep | 11388 |  | NULL     | 
| 412109 | root | localhost | somedb | Query |  0 | NULL | show full processlist | 
+--------+------+-----------+-------+---------+-------+-------+------------------------+ 

我想知道的過程中「休眠」這是命令下。這是什麼意思?爲什麼它長時間運行並顯示NULL?它會使數據庫變慢,當我殺死進程時,它會正常工作。請幫幫我。

+0

它沒有做任何事,只是坐在那裏「等待」連接。 – Rufinus

+1

我們可以找到哪個查詢正在等待連接?我的問題有點意義嗎?爲什麼它會減慢我的數據庫? – gthm

+0

它真的會減慢你的數據庫嗎?它什麼都不做。它基本上是一個無所事事的連接 - 例如,也許你在另一個終端上連接了一段時間,並且沒有斷開連接等。 – BugFinder

回答

41

它不是一個查詢等待連接,它是一個連接指針等待超時終止。

它對性能沒有影響。它唯一使用的是每個連接都有的幾個字節。

真的最糟糕的情況是它使用了池中的一個連接,如果您要通過控制檯客戶端連接多次,並且關閉客戶端而不關閉連接,則可以使用所有連接,並且必須等待超時能夠再次連接...但這是非常不可能的:-)

請參閱MySql Proccesslist filled with "Sleep" Entries leading to "Too many Connections"?https://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleep瞭解更多信息。

+0

這個問題可以是,如果你有有限的數據庫連接。因爲即使這些連接對性能沒有影響,它們仍然算作連接。 – mrded

14

「睡眠」狀態連接通常由維護與數據庫的持久連接的代碼創建。

這可能包括由應用程序框架創建的連接池或客戶端數據庫管理工具。

正如上面在評論中提到的,真的沒有理由擔心這些連接......除非你不知道連接是從哪裏來的。

(警告:如果你有這些類型的連接的一個長長的清單,有可能是跑出來的併發連接的危險。)

0

睡眠意思是說線程什麼都不做。 時間太長,因爲anthor線程查詢,但不斷開服務器, 默認wait_timeout = 28800;所以你可以設置更小的值,例如10. 也可以殺死線程。