標籤:mysql sleep 資料庫鎖定
公司有一台linux伺服器專門用來跑公司的WEB服務,由於曆史原因,網站數與頁面非常多,導致經常出現大量的sleep進程;MySQL伺服器所支援的最大串連數是有上限的,因為每個串連的建立都會消耗記憶體,因此我們希望用戶端在串連到MySQL Server處理完相應的操作後,應該中斷連線並釋放佔用的記憶體。如果你的MySQL Server有大量的閑置串連,他們不僅會白白消耗記憶體,而且如果串連一直在累加而不斷開,最終肯定會達到MySQL Server的串連上限數,這會報‘too many connections‘的錯誤。對於wait_timeout的值設定,應該根據系統的運行情況來判斷。在系統運行一段時間後,可以通過show processlist命令查看當前系統的串連狀態,如果發現有大量的sleep狀態的串連進程,則說明該參數設定的過大,可以進行適當的調整小些。
Mysql> show variables like “%timeout%”;
+-----------------------------+----------+
| Variable_name | Value |
+-----------------------------+----------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| wait_timeout | 28800 |
+-----------------------------+----------+
11 rows in set (0.00 sec)
經查詢發現原來mysql沒有進行過最佳化,還是原來的預設值:28800(即8個小時)
編輯 /etc/my.cnf,在mysqld 下 新增 timeout參數,設定為120秒,如下:
【mysqld】
wait_timeout=120
interactive_timeout=120
注意:要同時設定interactive_timeout和wait_timeout才會生效。
最後重啟一下mysql 生效 即可!
本文出自 “方寸小山” 部落格,請務必保留此出處http://523514.blog.51cto.com/513514/1547908
Mysql經常出現sleep進程的解決辦法