当我在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 |
+--------+------+-----------+-------+---------+-------+-------+------------------------+
我想知道命令下的“睡眠”过程。什么意思?为什么它运行了很长一段时间并显示为空?这会使数据库变慢,当我杀死进程时,它就会正常工作。请帮帮我。
发布于 2013-01-04 22:36:01
它不是一个等待连接的查询;它是一个等待超时终止的连接指针。
它不会对性能产生影响。它唯一使用的就是几个字节,就像每个连接一样。
真正最糟糕的情况是:它使用您的池中的一个连接;如果您通过控制台客户端多次连接,并且只关闭客户端而不关闭连接,那么您可能会用完所有连接,并且必须等待超时才能再次连接...但这是非常不可能的:-)
有关详细信息,请参阅MySql Proccesslist filled with "Sleep" Entries leading to "Too many Connections"?和https://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleep。
发布于 2013-01-04 04:12:15
“睡眠”状态连接通常由维护与数据库的持久连接的代码创建。
这可能包括应用程序框架创建的连接池,也可能包括客户端数据库管理工具。
正如上面评论中提到的,真的没有理由担心这些连接……当然,除非您不知道连接来自何处。
(注意:如果您有一个很长的此类连接列表,则可能会出现同时连接耗尽的危险。)
发布于 2018-03-12 19:36:45
我在这里找到了答案:https://dba.stackexchange.com/questions/1558。简而言之,使用以下命令(或在my.cnf中)将消除超时问题。
SET GLOBAL interactive_timeout = 180; SET GLOBAL wait_timeout = 180;
这允许连接在睡眠状态保持3分钟(或您定义的任何状态)时结束。
https://stackoverflow.com/questions/12194241
复制相似问题