我使用的是SQL Server2008Enterprise+ .Net 3.5 + C# + ADO.Net。我正在使用下面的SQL语句来监控连接号,对吗?如果是,我的困惑是,在下面的语句中,来自ADO.Net客户端的一个连接只映射到一个连接?或者一个ADO.Net连接可以映射到这里的多个连接?
SELECT * FROM sys.dm_os_performance_counters WHERE object_name = 'SQLServer:General Statistics'(监视用户连接行)
先谢谢你,乔治
发布于 2009-09-28 17:01:54
使用SELECT * FROM sys.dm_exec_connections查找所有连接。client_net_address有客户端地址,因此您可以追踪连接的来源。
使用SELECT * FROM sys.dm_exec_sessions查找所有会话(通常情况下,会话与connections一一对应,除非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'发布于 2009-09-27 08:42:05
这能满足你的需求吗?如果您试图计算连接的数量,我会感到困惑。你的问题似乎是否定的,而你的评论意味着我同意。
Sp_who2 'Active'发布于 2009-09-27 09:01:18
默认情况下,基础SQL Server驱动程序代码使用连接池。您会发现,您的应用程序“拥有”的物理连接的数量将随着时间的推移而增长到当前的限制,但这与“正在使用”的数量不同。
这避免了在每个链路上重新协商安全性等问题,从而加快了应用程序的数据库访问速度。
正如@sgmarshall所提到的,使用sp_who2存储过程来确定每个连接当前正在执行的操作。
https://stackoverflow.com/questions/1482864
复制相似问题