我正在使用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'
(监控用户连接行)
提前谢谢, 乔治答案 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
存储过程来确定每个连接当前正在做什么。