当我的睡眠连接保持打开时,MySQL CPU会增加

时间:2015-11-27 15:45:21

标签: mysql cpu-usage database-performance

我有一个MySQL 5.6.27-0ubuntu0.14.04.1,它运行在带有4个CPU的Google Compute实例上。

我注意到如果我连接睡眠很长时间,那么服务器的CPU将以线性方式增加。我不明白为什么?如果我终止Sleep连接,那么CPU只能恢复到正确的使用状态。

总结一下,我有以下几点: 我注意到我的实例的CPU正在增加: enter image description here

然后我检查服务器上的进程列表

mysql> show processlist
-> ;
+-------+--------+-------------------+----------------+---------+------+-------+------------------+
| Id    | User   | Host              | db             | Command | Time | State | Info             |
+-------+--------+-------------------+----------------+---------+------+-------+------------------+
| 85949 | nafora | paper-eee-2:58461 | state_recorder | Sleep   | 1300 |       | NULL             |
| 85956 | nafora | paper-eee-2:58568 | state_recorder | Sleep   |   64 |       | NULL             |
| 85959 | root   | localhost         | NULL           | Query   |    0 | init  | show processlist |
+-------+--------+-------------------+----------------+---------+------+-------+------------------+

你可以看到我只有2个连接睡眠,一个连接在这里1300秒(因为我有一个连接打开的进程)

所以我杀掉了连接85949,CPU就掉了下来。 enter image description here

有人可以解释为什么正在睡觉的单个连接会像这样影响我的数据库。

感谢。

1 个答案:

答案 0 :(得分:2)

某些非关闭连接或长时间运行的慢查询可能会导致此行为。您可以通过将全局变量wait_timeout配置为合理值来限制非闭合连接,并根据最佳实践设置另一个相关变量interactive_timeout

使用连接池(Java,.NET等)的有状态应用程序需要调整wait_timeout以匹配其连接池设置。默认的8小时(wait_timeout = 28800)适用于正确配置的连接池。

wait_timeout 配置为略长于应用程序连接池的预期连接生存期。这是一个很好的安全检查。同时对查询进行概要分析以观察MySQL实例的性能可以帮助您避免I/O bottlenecks