SQL Server连接计数问题

时间:2009-09-27 05:33:21

标签: c# .net sql sql-server sql-server-2008

我正在使用SQL Server 2008 Enterprise + .Net 3.5 + C#+ ADO.Net。我使用以下SQL语句来监视连接号,是否正确?如果是,我的困惑是,ADO.Net客户端的一个连接映射到以下语句中的一个连接?或者一个ADO.Net连接可以映射到多个连接吗?

SELECT  *  FROM sys.dm_os_performance_counters WHERE object_name = 'SQLServer:General Statistics'

(监控用户连接行)

提前谢谢, 乔治

3 个答案:

答案 0 :(得分:4)

使用SELECT * FROM sys.dm_exec_connections查找所有连接。 client_net_address具有客户端地址,因此您可以跟踪连接的来源。

使用SELECT * FROM sys.dm_exec_sessions查找所有会话(一般地图1到1中的会话连接,除非使用MARS)。 program_name列将包含您在连接字符串中传入的application name的值,并允许您标识自己的连接。

使用SELECT * FROM sys.dm_exec_requests查看所有当前正在执行的批次(请求)。

性能计数器只会给你一个值,即当前连接的数量:

SELECT  cntr_value
FROM sys.dm_os_performance_counters 
WHERE object_name = 'SQLServer:General Statistics'
  and counter_name = 'User Connections'

答案 1 :(得分:2)

这会满足您的需求吗?如果您正在尝试计算连接数,我会感到困惑。你的问题似乎说不,你的评论对我来说意味着什么。

Sp_who2 'Active'

答案 2 :(得分:1)

默认情况下,基础SQL Server驱动程序代码使用连接池。您会发现应用程序“拥有”的物理连接数会随着时间的推移而增加到当前限制,但这与“正在使用”的数量不同。

这可以避免在每个链接上重新协商安全性等,从而加快应用程序的数据库访问速度。

如@sgmarshall所述,使用sp_who2存储过程来确定每个连接当前正在做什么。