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

Jul*_*ann 6 mysql cpu-usage database-performance

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

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

总结一下,我有以下内容:我注意到我的实例的CPU正在增加: 在此输入图像描述

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

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 |
+-------+--------+-------------------+----------------+---------+------+-------+------------------+
Run Code Online (Sandbox Code Playgroud)

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

所以我杀了连接85949,CPU就掉了下来. 在此输入图像描述

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

谢谢.

S.K*_*kat 3

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

\n\n

使用连接池(Java、.NET 等)的有状态应用程序需要调整 wait_timeout 以匹配其连接池设置。默认 8 小时 (wait_timeout = 28800) 在正确配置的连接池中效果很好。

\n\n

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

\n