2014-04-10 69 views
1

我已经在我的连接字符串中设置了pooling=false,并且我检查了我的sql server 2008有15000个连接处于睡眠状态。我不明白为什么会发生这种情况。我的服务器冻结。需要一些帮助来解决它。非常感谢。15000连接到SQL Server 2008在“睡眠”状态

+0

也许因为你设置'池= FALSE'。 –

+0

加上你很可能不会 - 正确清理。如果在C#中没有关闭/处理连接对象,那么猜猜会发生什么;)C#端的连接对象很小,所以你可以在不触发垃圾回收的情况下进行很多操作。 – TomTom

回答

4

我假设原因是你已经设置了pooling=false。你应该总是使用using语句来关闭在你的代码的最佳的连接:

using(var myCon = new SqlConnection("Connection-String")) 
{ 
    myCon.Open(); 
    // .... 
} // will be closed automatically 

如果你想使用连接池你可以“关闭”,而无需底层的物理连接真正被关闭了连接。这是由游泳池管理的。如果你不使用它,你必须自己管理它。如果你不关闭连接,他们会保持睡眠

SQL Server Sleeping Status and Connection Pooling

你为什么禁用它呢?我的建议是:如果没有令人信服的理由,请重新启用它。

0

睡眠意味着它正在等待来自应用程序或客户端的下一个命令,并处于睡眠状态,它不使用任何资源。

SQL Server本身不会终止任何连接/进程,除非启动服务才能重新启动。

如果您想重新开始但在生产中,您可以执行restartSQL Server Service,但生产中可能不会导致停机。

(或)您可以kill那些手动处理非活动进程,如@Remush所述。

使用sp_whosp_who2将列明PIDS然后使用kill PID

+0

这些可以在没有停机的情况下进行清理,只需在循环中使用['KILL'](http://technet.microsoft.com/en-us/library/ms173730.aspx)即可。 –

+0

@RemusRusanu,是的,这也是一种可能性。 – Rahul