標籤:mysql線程用完 新串連無法串連的問題筆記!
問題:
MySQL伺服器所支援的最大串連數是有上限的,每個串連都會佔用一定的記憶體資源,因此當用戶端訪問MySQL伺服器處理完相應的操作後,就應該中斷連線釋放記憶體資源。
如果伺服器有大量的閑置串連,這樣就會白白的浪費記憶體,且如果一直在累加而不斷開的話,就會達到串連上限,報"too many connections”的錯誤。可通過命令"show process list”查看,若發現後台有大量的sleep線程,此時就需要調整上述參數了。
一些參數解釋:
show variables like ‘%max_connections%‘; --查詢當前串連
可以在/etc/my.cnf裡面設定資料庫的最大串連數
[mysqld]
max_connections = 1000
mysql> show status like ‘Threads%‘;
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 58 |
| Threads_connected | 57 | ###這個數值指的是開啟的串連數
| Threads_created | 3676 |
| Threads_running | 4 | ###這個數值指的是啟用的串連數,這個數值一般遠低於connected數值
+-------------------+-------+
Threads_connected 跟show processlist結果相同,表示當前串連數。準確的來說,Threads_running是代表當前並發數。
引用:http://blog.csdn.net/imxiangzi/article/details/46502423
SHOW FULL PROCESSLIST;
殺死kill + id;
說明各列的含義和用途,
id列:一個標識,你要kill 一個語句的時候很有用。
user列: 顯示目前使用者,如果不是root,這個命令就只顯示你許可權範圍內的sql語句。
host列:顯示這個語句是從哪個ip 的哪個連接埠上發出的。可用來追蹤出問題語句的使用者。
db列:顯示這個進程目前串連的是哪個資料庫。
command列:顯示當前串連的執行的命令,一般就是休眠(sleep),查詢(query),串連(connect)。
time列:此這個狀態持續的時間,單位是秒。
state列:顯示使用當前串連的sql語句的狀態,很重要的列,後續會有所有的狀態的描述,請注意,state只是語句執行中的某一個狀態,一個sql語句,已查詢為例,可能需要經過copying to tmp table,Sorting result,Sending data等狀態才可以完成。
info列:顯示這個sql語句,因為長度有限,所以長的sql語句就顯示不全,但是一個判斷問題語句的重要依據。
常用需要修改的參數:
1、interactive_timeout
2、wait_timeout
1.interactive_timeout
伺服器關閉互動式串連前等待活動的秒數。互動式用戶端指在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的用戶端。
參數預設值:28800秒(8小時)
2.wait_timeout
伺服器在關閉非互動式串連在一個串連上等待活動的秒數。
參數預設值:28800秒(8小時)
問題:
在my.cnf中單獨修改wait_timeout,mysqld重啟後仍不生效;(widnows my.ini)
同時修改interactive_timeout和wait_timeout參數,重啟伺服器後生效。
注意:由於MySQL版本問題,有的時候只需要修改wait_timeout這個值。具體參數需要根據版本查看手冊。
本文出自 “[email protected]” 部落格,謝絕轉載!
MySQL線程用完,新串連無法串連的問題筆記!