如何避免 mysql 进程进入睡眠状态

如何避免 mysql 进程进入睡眠状态

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 容量。

相关内容