Jan*_*nen 27
即使是我们中最强大的人,有时也需要睡觉。不睡觉就会焦虑,失眠会导致各种严重的症状。
更严重的是:睡眠状态意味着 MySQL 进程已完成其查询,但客户端尚未退出。许多 Web 应用程序之后不会清理它们的连接,这会导致 MySQL 进程休眠。如果只有少数几个,请不要担心;MySQL 将在可配置的超时时间 (wait_timeout) 后清理它们。
或者,如果您的 Web 应用程序使用持久连接和连接池,那么即使有很多休眠进程也是完全正常的:在这种情况下,您的应用程序只需打开例如 100 个 SQL 连接并保持它们打开。这减少了连接打开/关闭的开销。除非您的应用程序非常繁忙,否则几乎不是每个 SQL 进程都有事可做是正常的,因此它们会休眠。
不,不要担心它们,除非你有成千上万个。通常,它们表示当前未执行任何操作但仍处于活动状态的数据库连接。
许多网站的构建方式是,在开始处理页面时,会打开一个数据库连接,然后在整个页面生成过程中使用,最后在最后丢弃。如果丢弃正确完成,数据库连接将关闭,然后服务器将杀死相关线程,这意味着该连接从进程列表中消失。
如果连接没有关闭,它可能会一直处于“睡眠”状态,直到超时。在这种情况下,您可能会遇到很多睡眠过程。但是除非您在 db 服务器上遇到内存问题,否则这也不是什么大问题。
小智 5
在增加 max_connections 变量之前,您必须通过运行 show processlist 命令检查有多少个非交互式连接。
如果您有很多睡眠连接,则必须减小“wait_timeout”变量的值以在等待一段时间后关闭非交互式连接。
显示会话变量,例如“wait_timeout”; +---------------+--------+ | 变量名 | 价值| +---------------+--------+ | 等待超时| 28800 | +---------------+--------+
该值以秒为单位,表示非交互式连接仍长达 8 小时。
设置会话 wait_timeout=600; 查询正常,0 行受影响(0.00 秒)
10 分钟后,如果睡眠连接仍在睡眠,则 mysql 或 MariaDB 会删除该连接。
| 归档时间: |
|
| 查看次数: |
67583 次 |
| 最近记录: |