如何检查SQL Server的当前池大小

时间:2014-02-16 08:47:13

标签: sql-server-2012 database-connection connection-pooling

有没有办法检查SQL Server中的当前连接池大小?我不是在谈论最大连接池大小,而是当前池大小。假设最大池大小为100并且有49个连接打开,它现在应该显示51个可用或者可能消耗49个。

那么,有这样的查询吗?

2 个答案:

答案 0 :(得分:8)

这些东西似乎超出了dmv的直接访问范围。我相信有人比我更了解你可以得到更好的答案。

这是我能得到的尽可能接近。

SELECT  des.program_name
      , des.login_name
      , des.host_name
      , COUNT(des.session_id) [Connections]
FROM    sys.dm_exec_sessions des
INNER JOIN sys.dm_exec_connections DEC
        ON des.session_id = DEC.session_id
WHERE   des.is_user_process = 1
        AND des.status != 'running'
GROUP BY des.program_name
      , des.login_name
      , des.host_name
HAVING  COUNT(des.session_id) > 2
ORDER BY COUNT(des.session_id) DESC

这将通过登录以及每个主机和应用程序聚合您的连接。这将让您了解当前如何汇集您的连接。如果您知道自己的最大金额,可以减去它的连接数,它可以为您提供每个池中剩余的连接数。

答案 1 :(得分:3)

我认为要实现这一点,您可能希望在ADO.Net中使用NumberOfActiveConnections性能计数器(如果这是您的选项)。本文讨论了具体的反击:

http://msdn.microsoft.com/en-us/library/ms254503(v=vs.110).aspx

默认情况下它处于关闭状态,因此您必须添加一些配置才能启用它。这在以下链接中有详细说明。以下链接还有一些示例代码来读取计数器。

http://msdn.microsoft.com/en-us/library/ms254503(v=vs.110).aspx#ActivatingOffByDefault

希望这有帮助!