使用性能监视器监视池化连接

Vin*_*ntH 5 sql-server iis perfmon connection-pooling asp.net-mvc-3

我正在从负载失败的MVC3应用程序调查此错误:

"在从池中获取连接之前已经过了超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小."

该应用程序正在使用存储库模式和实体框架,我的预感是它没有正确关闭连接.我希望能够监视SQL Server上的池连接数.搜索引导我相信我可以在Perfmon中使用这些计数器:

  • .NET CLR数据
  • 用于SQLServer的.NET数据提供程序

但是它们都显示并被禁用/变灰.

我直接在服务器上运行Perfmon,并且ISS和SQL Server都在服务器上运行.有什么想法为什么这些计数器不可用?

我还尝试使用SQL事件探查器来监视池化连接,但是EventLog子类不适用于AuditLogin.

Bri*_*ian 7

您可以从SQL查询窗口运行此命令以获取计数以及SQL服务器上运行的当前连接和会话的详细信息.

select * FROM sys.dm_exec_sessions AS es  
INNER JOIN sys.dm_exec_connections AS ec  
ON es.session_id = ec.session_id
Run Code Online (Sandbox Code Playgroud)

我在汇集连接方面遇到了麻烦.他们很难控制.显然关闭它们似乎永远不会起作用,因为它们处于.NET的控制之下.我们用完连接的最大原因是未提交的事务.如果某个事务由于某种原因未提交或回滚,则连接不会被重新使用,而是迫使.NET打开另一个连接以继续处理.