我应该担心进程列表中的mysql睡眠状态过程吗


Answers:


17

即使我们中最有权势的人有时也需要睡觉。没有睡眠,人们就会变得焦虑不安,失眠会导致各种严重的症状。

更严重的是:睡眠状态意味着MySQL进程已经完成了其查询,但是客户端尚未退出。许多Web应用程序此后未清理其连接,这导致MySQL进程处于休眠状态。如果只有少数几个,请不要担心。MySQL将在可配置的超时时间(wait_timeout)之后清除这些内容。

或者,如果您的Web应用程序使用持久性连接和连接池,那么即使有很多睡眠进程也是完全正常的:在这种情况下,您的应用程序仅会打开例如100个SQL连接并保持打开状态。这减少了连接打开/关闭的开销。除非您的应用程序非常繁忙,否则通常不是每个SQL进程都需要执行某些操作,因此它们会休眠。


5

不,除非有成千上万个它们,否则不要担心它们。通常,它们指示数据库连接当前未执行任何操作,但仍保持活动状态。

建立了许多网站,以便在处理页面的开始时打开数据库连接,然后在页面的整个生成过程中使用数据库连接,最后在最后将其丢弃。如果丢弃正确完成,则数据库连接将关闭,然后服务器将终止相关线程,这意味着该连接将从进程列表中消失。

如果未关闭连接,则连接可能会保持“睡眠”状态,直到超时。在这种情况下,您可能会经历许多睡眠过程。但是除非您在数据库服务器上遇到内存问题,否则这也不是大问题。


3

在增加max_connections变量之前,您必须通过运行show processlist命令检查您有多少个非交互式连接。

如果您有许多睡眠连接,则必须减小“ wait_timeout”变量的值,以等待一段时间后关闭非交互式连接。

  • 要显示wait_timeout值:
显示会话变量,例如“ wait_timeout”;

+ --------------- + ------- +
| 变量名| 价值|
+ --------------- + ------- +
| wait_timeout | 28800 |
+ --------------- + ------- +

该值以秒为单位,这表示非交互式连接仍可长达8小时。

  • 更改“ wait_timeout”变量的值:
SET会话wait_timeout = 600;
查询正常,受影响的0行(0.00秒)

10分钟后,如果睡眠连接仍在睡眠,则mysql或MariaDB断开该连接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.