萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL sleep進程連接過多卡住了問題解決辦法

MySQL sleep進程連接過多卡住了問題解決辦法

MySQL sleep進程連接過多是因為沒有處理完都在隊列中了,如果我們要處理可以設置等待時間來解決這個問題,下面來看關於MySQL sleep進程連接過多卡住了原因分析及處理辦法。

MySQL sleep進程連接過多原因分析

當php的頁面執行結束時,會自動釋放掉一切。相信很多人都跟我想的一樣。但事實證明並不是這樣。比如session就不會隨著頁面執行完畢而釋放。

php的垃圾回收機制,其實只針對於php本身。對於mysql,php沒權利去自動去釋放它的東西。如果你在頁面執行完畢前不調用mysql_close(),那麼mysql那邊是不會關閉這個連接的。如果你是用的是pconnect方式,即使你在頁面執行完畢前調用mysql_close(),也無法另mysql關閉這個連接

mysql中睡眠連接會對mysql服務器造成影響

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

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

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

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

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

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

在mysql的配置文件中設置自動關閉鏈接時間過長的進程:

修改mysql的配置文件my.cnf , window系統中是my.ini

[mysqld]
......
wait_timeout=100
interactive_timeout=100

wait_timeout=100 #即設置mysql連接睡眠時間為100秒,任何sleep連接睡眠時間若超過100秒,將會被mysql服務自然終止。

設置好後重啟mysql

service mysqldrestart

修改mysql占用內存的參數如下:

table_open_cache=2000 改為

table_open_cache=256
table_definition_cache=1400 改為

table_definition_cache=400

copyright © 萬盛學電腦網 all rights reserved