天天看點

連接配接數過多導緻程式連接配接報錯的原因

涉及到的參數:

max_connections 1024
max_user_connections 1000
wait_timeout 100

         連接配接數是直接反應資料庫性能好壞的關鍵名額。可能的原因包括:

         (1)sql查詢堵死,造成後面的DML操作等待;

         (2)增删改查操作頻繁,磁盤IO遇到瓶頸,導緻無法處理繁忙請求等。

         如果出現too manyconnections,直接增大max_connections值得同時,一般設定為500-1000,在大多數情況下就可以了,但是如果繼續增加,比如增加為10000,就是治标不治本。因為連接配接數增大,會導緻每個連接配接所占用的記憶體也增加,這樣機器很容易因記憶體不足而當機。

mysql>show variables like '%connections%';

+----------------------+-------+

|Variable_name        | Value |

|max_connections      | 151   |

|max_user_connections | 0     |

2 rows inset (0.00 sec)

         在處理完一條請求後,會根據wait_timeout(伺服器關閉非互動連接配接之前等待活動的秒數)的值來釋放連接配接,一般設定為100s即可。如果沒有設定,采用預設的28800s,即8h,用戶端連接配接到mysql伺服器處理完相應的操作後,要等待8h才會釋放記憶體,如果資料庫伺服器有大量的閑置連接配接,不僅會白白消耗記憶體,如果連接配接一直累加而不斷開,最終會達到mysql連接配接的上限數,就會報這個錯誤。

mysql>show variables like 'wait_timeout%';

+---------------+-------+

|Variable_name | Value |

|wait_timeout  | 28800 |

1 row inset (0.00 sec)