涉及到的参数:
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)
在配置文件中:
wait_timeout=100