Estou trabalhando com um código antigo que extrai contadores de desempenho e parte do que estou fazendo é garantir que alguns processos sejam executados com eficiência e eficácia.
Agora eu tenho este código que estou olhando:
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'
Estou propondo substituí-lo por:
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'
Que é mais rápido e mais compatível com tudo o que é anterior ao SQL 2000. Não há mais ambientes que serão usados nessa execução do SQL 2000, a versão mais antiga que o código acima seria executado é o SQL 2008. Verifiquei se os valores retornados são congruente e funciona no contexto do restante do código.
Minha pergunta é: Quais são as diferenças entre dm_os_performance_counters
e master.dbo.sysperfinfo
? Preciso extrair dm_os_performance_counters
do contexto Mestre?
sys.dm_os_performance_counters
é a substituição desysperfinfo
. Consulte esta referência BOL sobre o mapeamento de tabelas do sistema para exibições do sistema/DMVs . Você deveria estar usandosys.dm_os_performance_counters
.Não, os DMVs (ou exibições de catálogo do sistema) podem ser acessados a partir do contexto de qualquer banco de dados, desde que você tenha as permissões apropriadas para visualizar o conteúdo. O exemplo abaixo para fins de ilustração seria ótimo:
A diferença entre
sys.sysperfinfo
esys.dm_os_performance_counters
não é o significado principal quesys.sysperfinfo
é uma visão de compatibilidade e é depreciada (para compatibilidade com versões anteriores). Portanto,sys.dm_os_performance_counters
apenas um substituto parasys.sysperfinfo
as versões mais recentes do SQL Server.Portanto, é uma boa ideia fazer a transição do modo de exibição de compatibilidade para o DMV (como você mencionou que o script não será usado para nenhum servidor SQL 2000).
Os DMV's podem ser executados para qualquer banco de dados se você tiver permissões necessárias, por exemplo, permissão VIEW SERVER STATE para executar
sys.dm_os_performance_counters
Referência: CONSULTANDO CONTADORES DE DESEMPENHO NO SQL SERVER para obter um script excelente para entender os contadores de desempenho.