在MySQL命令中显示PROCESSLIST:sleep

当我在MySQL数据库中运行SHOW PROCESSLIST时,我得到这个输出:

mysql> show full processlist; +--------+------+-----------+--------+---------+-------+-------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +--------+------+-----------+-------+---------+-------+-------+-----------------------+ | 411665 | root | localhost | somedb | Sleep | 11388 | | NULL | | 412109 | root | localhost | somedb | Query | 0 | NULL | show full processlist | +--------+------+-----------+-------+---------+-------+-------+------------------------+ 

我想知道命令下的“睡眠”过程。 这是什么意思? 为什么它运行很长时间,显示NULL? 这是使数据库变慢,当我杀了进程,然后它正常工作。 请帮帮我。

这不是一个等待连接的查询,它是一个等待超时终止的连接指针。

它对性能没有影响。 它唯一使用的是每个连接都有几个字节。

最糟糕的情况是它使用了一个连接池,如果通过控制台客户端连接多次,closures客户端而不closures连接,则可以用完所有连接,并且必须等待超时才能再次连接…但这是不太可能的:-)

看到充满“睡眠”条目导致“太多连接”的MySql Proccesslist? 和https://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleep了解更多信息。;

“睡眠”状态连接通常由维护与数据库的持续连接的代码创build。

这可能包括由应用程序框架创build的连接池或客户端数据库pipe理工具。

正如上面在评论中提到的那样,真的没有理由担心这些连接……除非你不知道连接是从哪里来的。

(CAVEAT:如果您有很长的这种连接列表,可能会有同时连接耗尽的危险。)

睡眠意味着线程什么都不做。 时间太长,因为anthor线程查询,但不断开服务器,默认wait_timeout = 28800;所以你可以设置更小的值,例如10.也可以杀死线程。