Muitas vezes precisamos verificar o desempenho de um servidor, principalmente quando reclamações constantes de “lentidão” no sistema nos assolam. Normalmente, por trás de um problema de desempenho, diversos podem ser os causadores tanto no que diz respeito ao físico quanto ao banco de dados.
Diversos fatores precisam ser analisados e melhorados para conseguirmos um ganho significativo de desempenho. Com isso, acredito que muitos ainda utilizem o Perfmon e seus contadores de desempenho para analisar o ambiente. Eu pessoalmente, acho uma ferramenta muito útil, principalmente porque você não vai encontrar por aí muitas empresas que invistam em ferramentas de análise de performance. Além do que, mesmo que você tenha, algumas empresas tem políticas de segurança bem rígidas e não deixam que você utilize qualquer software.
Então, partindo do básico, vou mostrar aqui alguns contadores de performance do perfmon. Montado como um guia de referência de valores bons e ruins, e uma breve descrição para que serve.
Não esqueçam que a medição de um contador sozinho não significa muita coisa, o ideal é analisar em conjunto com outros contadores, e outros fatores dependendo do problema. Para começar, nesse post, colocarei os contadores de sistema operacional. Nos próximos informarei sobre os utilizados especificamente para SQL Server.
CONTADORES GERAIS DO SISTEMA OPERACIONAL
Objeto: Contador
Memory: Available MBytes
Valor Esperado
> 100MB
Descrição:
Total de memória física disponível para os processos em execução no computador, em megabytes. Existe pressão de memória se esse valor for muito baixo.
Objeto: Contador
Memory: Free System Page Table Entries
Valor Esperado
> 7000
Descrição:
Free System Page Table Entries é o número de entradas nas “page tables” atualmente sem uso pelo sistema. Se o contador for < 7000, considere remover /3GB ou utilizar /userva conforme http://support.microsoft.com/kb/316739 .
Nota: Devido mudanças no gerenciador de memória, o método de calcular FreeSysPTEs no Windows Server 2003 não é preciso. Perfmon sempre mostrará um valor bem menor que o valor de 10+ kilobytes (K) que o normal. Para computadores que rodam Win Server 2003 sem o SP1, o valor correto para FreeSysPTEs pode ser obtido usando o comando !vm 1 e verificando o valor que é mostrado por “Free System PTEs” no debugger do kernel ou dentro da ferramenta LiveKd do Sysinternals. Veja o http://support.microsoft.com/kb/894067 .
Objeto: Contador
Memory: Pages Input/Sec
Valor Esperado
< 10
Descrição:
Pages Input/sec é a taxa de páginas lidas do disco para resolução de “hard page fault” Veja http://support.microsoft.com/kb/889654 .
Objeto: Contador
Memory: Pages/Sec
Valor Esperado
Verifique a descrição
Descrição:
Pages/sec é a taxa de páginas que são lidas ou escritas no disco para resolução de “hard page faults”. Esse contador é um indicador primário de tipos de faltas que causam delays no sistema. Investigar se mais de 100 páginas por segundo em um sistema com um disco lento, normalmente até 500 páginas por Segundo em um sistema com um disco rápido pode não ser um problema.
Nota:
• Valores >20 páginas que aparecem em muitas outras fontes de documentação estão descontinuados.
• Um alto valor de Memory:Pages/sec não necessáriamente indica problemas de memória ou um erro do System Monitor. Para conseguir uma leitura precisa do seu sistema, você também deve monitorar outros contadores (Pages Input/Sec, %Usage, %Usage Peak). Veja http://support.microsoft.com/kb/889654 .
Objeto: Contador
Paging File: %Usage
Valor Esperado
< 70%
Descrição:
O total da instância de “Page File” é usado em percentual. Veja http://support.microsoft.com/kb/889654 .
Objeto: Contador
Paging File: %Usage Peak
Valor Esperado
< 70%
Descrição:
Pico de uso da instância “Page File” em percentual. Veja http://support.microsoft.com/kb/889654 .
Objeto: Contador
Processor: Privileged Time
Valor Esperado
< 30% of Total %Processor Time
Descrição:
% Privileged Time é o percentual de tempo decorrido que os processos gastam executando código em modo privilegiado.
Objeto: Contador
Processor: Processor Time
Valor Esperado
< 80%
Descrição:
% Processor Time é o percentual de tempo gasto que o processador leva para executar uma non-Idle thread.
Objeto: Contador
Process(sqlservr): % Privileged Time
Valor Esperado
< 30% of %Processor Time (sqlservr)
Descrição:
% Privileged Time é o percentual de tempo decorrido que os processos gastam executando código em modo privilegiado.
Nota: Dividir o valor pelo número de processadores
Objeto: Contador
Process(sqlservr): % Processor Time
Valor Esperado
< 80%
Descrição:
% Processor Time é o percentual de tempo decorrido de todas as threads usadas pelo processador para executar as instruções. Uma instrução é a unidade básica de execução em um computador, uma thread é o objeto que executa instruções, e um processo é o objeto criado quando um programa está rodando. Códigos executados para lidar com algumas interrupções de hardware e condições adversas são incluídos nessa contagem.
Objeto: Contador
System: Context Switches/sec
Valor Esperado
< 3000
Descrição:
Excelente
1500 – 3000 por processador
Aceitável
> 6000 por processador
Ruim
Valor acima do limite gira em torno de 40,000 a 90% CPU por CPU
NOTA: Lembre-se de dividir pelo número de processadores.
Objeto: Contador
System: Processor Queue Length < 4 per CPU
Valor Esperado
Excelente
<= 4 por CPU
Bom
< 8 por CPU
Aceitável
< 12 por CPU
Objeto: Contador
PhysicalDisk: Avg. Disk sec/Read < 8ms
Descrição:
Medida de latência de disco. Avg. Disk sec/Read é a média de tempo, em segundos, de uma leitura de dado do disco.
Mais info:
Leituras
Excelente < 08 Mseg (.008 segundos)
Bom < 12 Mseg (0.12 segundos)
Aceitável < 20 Mseg (0.20 segundos)
Ruim > 20 Mseg (0.20 segundos)
Objeto: Contador
PhysicalDisk Avg. Disk sec/Write
Valor Esperado
< 8ms (non cached)
< 1ms (cached)
Descrição:
Medida de latência de disco. Avg. Disk sec/Write é a média de tempo, em segundos, de uma escrita de dado no disco.
Non cached Writes
Excelente < 08 Mseg (.008 segundos)
Bom < 12 Mseg ( .012 segundos)
Aceitável < 20 Mseg ( .020 segundos)
Ruim > 20 Mseg ( .020 segundos)
Cached Writes Only
Excelente < 01 Mseg (.001 segundos)
Bom < 02 Mseg (.002 segundos)
Aceitável < 04 Mseg (.004 segundos)
Ruim > 04 Mseg ( .004 segundos)