首页 > 解决方案 > 进程等待命令但睡眠

问题描述

我正在使用带有 Nodejs 的 SQL Server 数据库。我正在使用连接池来执行各种查询。当我运行时sp_who2,我可以看到几乎有 20 个进程具有状态sleeping和命令等待命令。

我应该继续删除这些进程吗?我在其他一些帖子中读到,当您在 SQL Server 中创建事务但不关闭/提交/回滚该事务时会发生这种情况。我在我的应用程序中没有看到任何地方我没有提交或回滚错误的事务。所以我不确定错误来自哪里。

我有一种感觉,将这些进程留在那里会在将来导致查询超时问题。有没有办法查看导致睡眠但等待状态的查询?

标签: sql-server

解决方案


我通常会看到许多睡眠连接。我认为这很正常。如果您有打开的事务和锁的休眠连接,那么您需要进行调查。我会尝试识别持有锁的主机和PID。在某些情况下,解决方案是与负责不结束交易的人进行礼貌交谈。

连接池是与 SQL Server 的连接池。除非在使用中,否则它们将处于空闲状态和睡眠状态。通常,池中的连接存在超时。(例如,如果您查看 ODBC 控制面板,连接池选项卡通常会显示 60 秒超时。它也可能始终保持最小数量的空闲连接。)检查您是否有最小数量的空闲连接。一旦您知道超时,请验证连接是否按预期超时......最终。如果没有,我会寻找连接泄漏或连接池问题。完成后应用程序是否释放连接?GC 必须在连接消失之前运行吗?

多年前存在一个问题,即连接可以通过打开的事务返回到池中。直到连接准备好重用,它才最终被重置。这个问题已被解决。

另一个过去的问题是连接断开。例如,如果重新启动 SQL Server,则所有空闲连接都会中断。但是,直到请求连接时才进行检查。在替换池中的每个连接之前,都需要连接失败超时。这是一个皮塔饼。


推荐阅读