![如何避免 mysql 进程进入睡眠状态](https://linux22.com/image/603326/%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%20mysql%20%E8%BF%9B%E7%A8%8B%E8%BF%9B%E5%85%A5%E7%9D%A1%E7%9C%A0%E7%8A%B6%E6%80%81.png)
mysql 进程中的睡眠是什么意思,如何避免由于高负载而导致的睡眠?
Id User Host db Command Time State Info
93714 mydb localhost xyz Sleep 2 NULL
93715 root localhost NULL Query 0 NULL show full processlist
这是高负载:
top - 00:31:35 up 21 days, 9:27, 1 user, load average: 12.67, 6.68, 2.94
Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.3%us, 0.6%sy, 0.0%ni, 94.3%id, 3.8%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1022732k total, 614528k used, 408204k free, 84316k buffers
Swap: 0k total, 0k used, 0k free, 135992k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
322 mysql 20 0 413m 173m 7452 S 99 17.4 97:42.25 mysqld
1 root 20 0 8356 688 560 S 0 0.1 0:15.61 init
答案1
通常情况下,睡眠过程并不值得担心,除非你睡眠过程太多,以至于你不再需要mysql 服务器上的可用连接。
它基本上意味着一个进程仍保持连接打开,通常是打开连接的脚本尚未关闭它,因为它尚未结束或在再次使用连接之前正在执行一些处理。也可能是您的客户端配置为使用连接池,在这种情况下,连接保持打开状态以节省始终创建新连接的开销。
wait_timeout
无论如何,MySQL 会在几秒之后自动终止这些进程interactive_timeout
。
答案2
睡眠表示您的进程正在等待某项操作(例如 I/O)。当进程不执行任何操作时,睡眠是正常状态。但是,就您而言(考虑到高负载和高 CPU),进程处于睡眠状态似乎是因为您的 CPU 能力不足。我建议您增加 CPU 容量。