萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL中Sleep連接過多的問題解決辦法

MySQL中Sleep連接過多的問題解決辦法

Sleep連接多過會導致mysql負載加重並且有時導致mysql無法處理正常的任務了,對於這個問題小編總結了一些解決辦法。

有時候你在mysql中運行SHOW PROCESSLIST;後會發現數據庫中有很多這樣的進程:

MySQL中Sleep連接過多那麼造成sleep的原因,有三個,下面是mysql手冊給出的解釋:

1.客戶端程序在退出之前沒有調用mysql_close().[寫程序的疏忽,或者數據庫的db類庫沒有自動關閉每次的連接。。。]
2.客戶端sleep的時間在wait_timeout或interactive_timeout規定的秒內沒有發出任何請求到服務器. [類似常連,類似於不完整的tcp ip協議構造,服務端一直認為客戶端仍然存在(有可能客戶端已經斷掉了)]
3.客戶端程序在結束之前向服務器發送了請求還沒得到返回結果就結束掉了. [參看:tcp ip協議的三次握手]

解決的方法也很簡單

在配置文件中加入

[mysqld]

wait_timeout=10

或者

mysql> set global wait_timeout=10;


在我的生產環境中,使用這個辦法,取得了相當好的效果。

當然,更根本的方法,還是從以上三點排查之:

1. 程序中,不使用持久鏈接,即使用mysql_connect而不是pconnect。

2.   程序執行完畢,應該顯式調用mysql_close

 

copyright © 萬盛學電腦網 all rights reserved