首页 文章

MySQL命令中的SHOW PROCESSLIST:sleep

提问于
浏览
67

当我在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?它使数据库变慢,当我终止进程时,它正常工作 . 请帮我 .

4 回答

  • 0

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

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

    最糟糕的情况:它正在使用你的游泳池的一个连接;如果您通过控制台客户端多次连接并且只关闭客户端而不关闭连接,则可能会耗尽所有连接并且必须等待超时才能再次连接...但这不太可能:-)

    有关更多信息,请参阅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 .

  • 19

    “睡眠”状态连接通常由维护与数据库的持久连接的代码创建 .

    这可能包括应用程序框架创建的连接池或客户端数据库管理工具 .

    正如上面评论中所提到的,没有理由担心这些连接......除非您当然不知道连接的来源 .

    (CAVEAT:如果你有这么多类型的连接列表,可能会有同时连接耗尽的危险 . )

  • 0

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

  • 53

    我在这里找到了这个答案:https://dba.stackexchange.com/questions/1558 . 简而言之,使用以下(或my.cnf内)将删除超时问题 .

    SET GLOBAL interactive_timeout = 180; SET GLOBAL wait_timeout = 180;

    如果连接保持在睡眠状态3分钟(或您定义的任何内容),则允许连接结束 .

相关问题