在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
睡眠表明你的进程正在等待什么(例如I / O)。 当一个过程什么都不做时,睡觉是正常的状态。 但在你的情况下,似乎(考虑到高负载和高CPU),因为你没有足够的CPU能力,进程正在睡觉。 我会build议增加你的CPU容量。
睡眠进程通常不需要担心,除非你有太多的连接,你不再有任何mysql服务器上的可用连接 。
所有这一切意味着一个进程仍然保持打开连接,通常打开连接的脚本还没有closures,因为它还没有结束,或者在再次使用连接之前正在做一些处理。 也可能是您的客户端被configuration为使用连接池,在这种情况下,连接保持打开状态,以节省始终创build新连接的开销。
无论如何,在wait_timeout
或者interactive_timeout
秒后,MySQL会自动杀死这些进程。