我正在使用一些老代码来提取性能计数器,我所做的部分工作就是确保我们高效有效地执行一些进程。
现在,我有一个代码,我正在查看:
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吗?
发布于 2013-07-25 18:37:22
sys.sysperfinfo和sys.dm_os_performance_counters之间的区别并不是那么大,这意味着sys.sysperfinfo是一个兼容性视图,并且被贬低(用于向后兼容性)。因此,sys.dm_os_performance_counters只是Server更新版本的sys.sysperfinfo的替代品。
因此,从兼容性视图转换到DMV(正如您提到的脚本不会用于任何SQL 2000服务器)是一个好主意。
如果您拥有运行sys.dm_os_performance_counters的视图服务器状态权限,则可以为任何数据库运行DMV。
参考:在SQL SERVER中查询性能计数器获得一个优秀的脚本来理解性能计数器。
发布于 2013-07-25 18:34:14
dm_os_performance_counters和master.dbo.sysperfinfo有什么区别?
sys.dm_os_performance_counters是sysperfinfo的替代品。请看这个系统表到系统视图/DMV映射的BOL参考。您应该使用sys.dm_os_performance_counters。
我需要从主上下文中提取dm_os_performance_counters吗?
否,只要您具有查看内容的适当权限,就可以从任何数据库的上下文中访问DMV(或系统目录视图)。为了说明起见,下面的示例将是很好的:
use NonMasterDatabase;
go
select *
from sys.dm_os_performance_counters;https://dba.stackexchange.com/questions/47011
复制相似问题