Queries do Dia a Dia – Monitorando Contadores de forma simples via DMV
Olá Pessoal,
Hoje vou compartilhar com vocês mais um script que utilizo nos clientes que realizo um monitoramento diário do SQL Server.
Realizando uma busca na internet você encontra algumas formas de monitorar contadores no SQL Server. Você pode enviar dados do perfmon para um arquivo e depois importar para o SQL Server, pode fazer alguma rotina em powershell, pode usar uma ferramenta de terceiro e etc…
Normalmente, antes de analisar contadores mais específicos em um ambiente, eu crio uma rotina para monitorar apenas 4 contadores que consigo pegar facilmente via DMV (existem outros contadores que também podem ser monitorados por essa mesma DMV).
A DMV que nos dá essa informação é a sys.dm_os_performance_counters. Faça um select * nela para validar se existem outros contadores que possam ser interessantes para você.
Já vi casos dessa DMV não retornar informações. Existem algumas soluções no google para isso, e se acontecer com você, seu amigo será o google. Tem muito tempo que não pego esse problema, e não lembro qual solução me atendeu na época. (viu Fabrício… não colocou no blog sobre isso, não lembra mais… Bem feito… =\…)
Se consigo pegar de forma bem simples alguns contadores, porque não criar uma Baseline para isso?
Seguem os contadores que vou monitorar nessa rotina:
- BatchRequests: Transações por segundo no SQL Server (bom para monitorar como está a utilização do banco de dados);
- User Connection: Quantidade de conexões no banco de dados (bom para monitorar quando temos um maior número de usuários conectados).
- Esse log de conexões me ajudou a desvendar um problema em um cliente onde o SQL Server estava chegando ao seu limite de conexões que é de 32.767 conexões. Mas isso já é assunto para um futuro post no Blog;
- CPU: Consumo de CPU do servidor (bom para acompanhar o consumo de CPU);
- Page Life Expectancy: Expectativa de vida em segundos de uma página na memória do SQL Server (bom para monitorar se você está mantendo dados em cache por muito tempo, evitando acessos a disco).
Para criar essa rotina, basta abrir o arquivo abaixo na base que deseja criar esse log e executar o script:
Historico_Contadores_SQLServer
O script vai criar as tabelas abaixo:
- Contador
- Registro_Contador
E a procedure que fará a carga dos dados nas Tabelas:
- stpCarga_ContadoresSQL
Depois de executar o script, basta criar um job para executar a procedure stpCarga_ContadoresSQL a cada 1 minuto, ou menos, caso queira informações mais precisas.
Essa procedure demora 5 segundos para rodar devido a um waitfor delay que existe dentro dela. Ela é bem leve e não impacta na performance do seu ambiente.
Após executado, você pode conferir os contadores armazenados com o Script abaixo:
1 2 3 4 |
SELECT Dt_Log, Nm_Contador, Valor FROM Registro_Contador A JOIN Contador B ON A.Id_Contador = B.Id_Contador ORDER BY Nm_Contador, Dt_Log |
Segue o resultado após 3 execuções da procedure:
Não se esqueça de criar um outro job para excluir dados antigos para que a tabela Registro_Contador não cresça muito.
Se hoje você já tem seu monitoramento de contadores mais completo, parabéns!!! Permaneça com ele.
Se hoje não monitora nada, esses 4 contadores já são um bom começo.
É um script simples, mas já está aí prontinho para vocês utilizarem caso achem interessante.
Gostou dessa dica?
Cadastre seu e-mail para receber novos Posts e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.
Aprenda a criar essa e muitas outras rotinas importantes para o seu dia a dia de DBA no meu Treinamento de Tarefas do Dia a Dia de um DBA.
Abraços,
Fabrício Lima
MCITP – Database Administrator
Consultor e Instrutor SQL Server
Trabalha com SQL Server desde 2006
ótimo!
Que bom que gostou Daniele! Espero ter ajudado.
Abraço.
Fabricio
Olá boa tarde! Consigo fazer esse script para pegar todas as bases ao mesmo tempo? Ou terei que criar em cada base que possuo??
Olá Michelle,
Os quatro contadores que citei no post valem para a instância inteira, exceto pelo contador de CPU que monitora o servidor, ou seja, várias instâncias que estão no mesmo servidor irão retornar o mesmo valor para esse contador de CPU, mas os valores dos outros contadores serão diferentes.
Abraço.
Fabrício
Se eu coletar por 24 horas, rodando 5s à cada coleta.Quando eu juntar os resultados e rodar um Avg, ele me retornará a media exata dos batch? Será preciso?
Olá, se fizer isso vai ter a média exata dos valores coletados que estarão na sua tabela.
O contador da CPU está em porcentagem, mb, gb?
Percentual.