在网站运行期间,在mysql进程列表中,我看到有几个进程的“command”列标记为“SLEEP”。
我应该担心吗? 如何阻止这个?
即使是最强大的我们也需要有时睡觉。 没有睡眠就变得焦虑不安,失眠会导致各种严重的症状。
更严重的是:睡眠状态意味着MySQL进程已经完成了查询,但是客户端还没有退出。 许多Web应用程序之后都不清理它们的连接,导致MySQL进程正在hibernate。 不要担心,如果只有less数人, MySQL会在可configuration的超时时间(wait_timeout)之后清理这些数据。
或者,如果您的Web应用程序使用持久性连接和连接池,那么甚至有很多睡眠进程是非常正常的:在这种情况下,您的应用程序仅打开例如100个SQL连接并保持打开状态。 这减less了连接打开/closures的开销。 除非您的应用程序非常繁忙,否则几乎不是每个SQL进程都需要做的事情,这是正常的,所以他们会睡觉。
不,别担心,除非你有成千上万的人。 通常它们表示一个目前没有做任何事情的数据库连接,但是否则仍然活着。
许多网站都是这样构build的,在处理页面开始时,打开一个数据库连接,然后在整个页面生成过程中使用,最后丢弃。 如果丢弃正确完成,数据库连接将closures,服务器将终止相关线程,这意味着该连接将从进程列表中消失。
如果连接未closures,则可能会保持“hibernate”状态直到超时。 在这种情况下,最终可能会有很多睡眠过程。 但除非遇到db服务器上的内存问题,否则这也不是一个大问题。