MySQL sleep過多解決方法


睡眠連接過多,會對mysql服務器造成什么影響?

嚴重消耗mysql服務器資源(主要是cpu, 內存),並可能導致mysql崩潰。

造成睡眠連接過多的原因?

1. 使用了太多持久連接(個人覺得,在高並發系統中,不適合使用持久連接)

2. 程序中,沒有及時關閉mysql連接

3. 數據庫查詢不夠優化,過度耗時。

那么,如果要從根本上解決sleep連接過多,就得從以上三點反復檢查,但是見效並不快。

網上有人分享,使用shell腳本配合cron,定期殺死睡眠時間太久的連接,但是這種方法非常不可取,典型的以暴制暴,很可能導致數據崩潰,而且,還需要編寫相應shell, 設置cron, 實施成本較繁瑣,不推薦使用。

那么更好的辦法應該是讓mysql自己決定這些睡眠連接的命運,實施會更簡單,有效。

mysql的配置文件中,有一項:

wait_timeout, 即可設置睡眠連接超時秒數,如果某個連接超時,會被mysql自然終止,多好的辦法!

如設置: 

wait_timeout=100 #即設置mysql連接睡眠時間為100秒,任何sleep連接睡眠時間若超過100秒,將會被mysql服務自然終止,要比編寫shell腳本更簡單。

那么,對於正在運行中的生產服務器,在不能停止服務情況下,修改此項怎么辦?很簡單,以root用戶登錄到mysql,執行:

set global wait_timeout=100

即可。

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

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

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

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

3. 只能逐步分析系統的SQL查詢,找到查詢過慢的SQL,優化之

轉自

MySQL sleep連接過多的完美解決辦法_數據庫技術_Linux公社-Linux系統門戶網站
http://www.linuxidc.com/Linux/2010-11/29983.htm

如下圖所示: 
這里寫圖片描述 
在Navicat Premium中可以看到很多處於sleep狀態的連接,那怎么讓MySQL自動關閉這些處理sleep狀態的連接呢?

wait_timeout默認值: 
這里寫圖片描述 
interactive_timeout默認值: 
這里寫圖片描述

sql命令:

SHOW GLOBAL VARIABLES LIKE 'wait_timeout'; SHOW GLOBAL VARIABLES LIKE 'interactive_timeout'; set global wait_timeout=30; SET GLOBAL interactive_timeout=30;

小注:wait_timeout要與interactive_timeout一起修改才能起效。 
這種修改方式在重啟mysql服務后,會失效,所以最好還是把這兩個屬性配置到mysql配置文件中。

 

轉自

MySQL sleep連接過多 解決辦法 - 衣舞晨風 - CSDN博客
http://blog.csdn.net/jiankunking/article/details/53511576

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM