如何获取SQL性能计数器中的活动连接池数量,可用Python或SQL实现吗
NumberOfActive Connection Pools 取值获取方案
Python 捕获方法
可以通过Python获取该性能计数器数值,操作步骤如下:
- 首先安装依赖库:
pip install pywin32 - 参考代码实现:
import win32pdh import win32pdhutil # 定义性能计数器参数 counter_category = ".NET Data Provider for SqlServer" counter_name = "NumberOfActiveConnectionPools" # 若要指定对应进程,替换为实际进程名,默认取全局值可填"_Global_" instance_name = "_Global_" # 初始化计数器查询 query = win32pdh.OpenQuery() counter = win32pdh.AddCounter(query, f"\\{counter_category}({instance_name})\\{counter_name}") win32pdh.CollectQueryData(query) # 获取数值 _, value = win32pdh.GetFormattedCounterValue(counter, win32pdh.PDH_FMT_LONG) print(f"活动连接池数量:{value}") # 清理资源 win32pdh.RemoveCounter(counter) win32pdh.CloseQuery(query)
注意:该计数器是Windows系统级别的.NET性能计数器,仅支持在部署了对应.NET应用的Windows环境下运行上述代码
SQL 查询实现说明
NumberOfActiveConnectionPools 属于ADO.NET客户端层面的统计项,不存在于SQL Server服务端的内置统计中,没有原生SQL可以直接从SQL Server实例查询该值。如果必须通过SQL语句获取,可借助SQL Server的xp_cmdshell扩展调用Windows系统的性能计数器工具实现,操作前提是你有SQL Server的sysadmin权限,且允许开启xp_cmdshell(生产环境不建议随意开启):
-- 开启xp_cmdshell(执行后建议关闭) sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'xp_cmdshell', 1; RECONFIGURE; -- 执行查询获取活动连接池数量,可根据你使用的.NET数据提供程序调整计数器名称 EXEC xp_cmdshell 'typeperf "\.NET Data Provider for SqlServer(_Global_)\NumberOfActiveConnectionPools" -sc 1'; -- 关闭xp_cmdshell sp_configure 'xp_cmdshell', 0; RECONFIGURE; sp_configure 'show advanced options', 0; RECONFIGURE;
注意:该SQL仅能在部署了对应.NET应用的同一台服务器的SQL Server实例上执行,才能读到正确的计数器值
内容的提问来源于stack exchange,提问作者Raviteja Reddy
相关产品推荐
相关产品推荐

