我正在使用一些旧代码来拉动性能计数器,而我正在做的部分工作是确保我们正在高效且有效地执行某些流程。
现在我有我正在查看的代码:
SELECT REPLACE(RTRIM(OBJECT_NAME), 'SQLServer:', '') AS 'Object',
RTRIM(counter_name) AS 'Counter',
RTRIM(instance_name) AS 'Instance',
cntr_value AS VALUE
FROM MASTER.dbo.sysperfinfo
WHERE OBJECT_NAME <> 'SQLServer:User Settable'
我建议将其替换为:
SELECT REPLACE(RTRIM(OBJECT_NAME), 'SQLServer:', '') AS 'Object',
RTRIM(counter_name) AS 'Counter',
RTRIM(instance_name) AS 'Instance',
cntr_value AS VALUE
FROM sys.dm_os_performance_counters
WHERE OBJECT_NAME <> 'SQLServer:User Settable'
哪个更快,更兼容 SQL 2000 之后的所有内容。没有将在运行 SQL 2000 时使用的环境,运行上述代码的最早版本是 SQL 2008。我检查了返回的值是一致并且它在其余代码的上下文中工作。
dm_os_performance_counters
我的问题是:和之间有什么区别master.dbo.sysperfinfo
?我需要dm_os_performance_counters
从主上下文中提取吗?
sys.dm_os_performance_counters
是 的替代品sysperfinfo
。请参阅此BOL 参考,了解系统表到系统视图/DMV 的映射。你应该使用sys.dm_os_performance_counters
.不,只要您具有查看内容的适当权限,就可以从任何数据库的上下文中访问 DMV(或系统目录视图)。以下示例用于说明目的就可以了:
sys.sysperfinfo
和之间的区别sys.dm_os_performance_counters
并不是sys.sysperfinfo
兼容性视图和贬值的主要含义(为了向后兼容)。因此,sys.dm_os_performance_counters
只是替代了sys.sysperfinfo
较新版本的 SQL Server。因此,从兼容性视图过渡到 DMV 是一个好主意(正如您提到的,该脚本不会用于任何 SQL 2000 服务器)。
如果您具有所需的权限,例如 VIEW SERVER STATE 运行权限,则可以为任何数据库运行 DMV
sys.dm_os_performance_counters
参考:QUERYING PERFORMANCE COUNTERS IN SQL SERVER获取一个出色的脚本来理解性能计数器。