目前我遇到了很多服务器进程问题(从sp_who2中看到)“睡眠”,而不仅仅是,完成(被删除),当我连接到我的MSSQL数据库,调用存储过程,获取一些数据和然后关闭连接。如何避免MSSQL中的“睡眠”进程?
在C#/ .NET中连接到MSSQL数据库,调用存储过程,从存储过程(数据读取器)检索数据,然后关闭连接的最佳方式是什么?
有没有办法关闭/处置,使“睡眠”进程被杀害?
它与我创建新的SqlConnections,打开它们并关闭他们有什么关系吗?
我的流程如下:
请求发生:
- 我创建了一个新的SqlConnection实例连接到我的MSSQL数据库。
- 我调用一个存储过程,检索数据并将其呈现给用户。
- 我关闭连接
.Close();
- 我重复所有这些步骤为每个请求。请求每5-10秒发生一次。 (有时更慢,有时更快)
对不起如果这个问题缺少一些细节,但我希望这足以得到一些有用的答案。
谢谢!
这是正常现象 - 连接池和其数量始终保持可用,以最大限度地减少设置物理连接的开销。关闭连接并不会真的关闭它,它只是让它再次可用于池。你遇到的是什么“问题”?活动会话的数量是否真的在增加,或者您是否认为存在错误,因为这些会话都存在?您的一般用法是正确的,但不是明确调用'.Close()',而是''使用':即使面对异常,这也是安全的。 –
@JeroenMostert我会张贴它作为答案,添加一个链接到msdn文档的主题https://msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx – bradbury9
我的假设有些事情是错误的,就是当很多“睡眠”进程中,数据库变得越来越慢,当我试图清除这些“睡眠”进程时,数据库变得更快。这只是一个假设吗? –