Categorias
Monitoramento SQL Server Virtual PASS BR

Performance Counter: Processador

Além de saber o que monitorar em um ambiente (veja o post: Performance Counter: você sabe o que monitorar?“) é nessario saber o significado de cada contador e como relacionar um contador com outro.

Nesse primeiro momento vamos falar um pouco sobre processador.

O processamento é responsável pela execução de instruções de máquina, sendo limitado pelo número de processadores (CPU) e seu clock de operação. Qualquer comando no servidor requer uma cota mínima de processamento e a falta desse recurso pode causar enfileiramento de requições e espera em fila.

O Ivan Lima (@SQLInsane) está com uma serie sobre “Inside The Machine” que recomendo a leitura caso queira saber mais sobre hardware!

O acompanhamento do consumo de CPU pode ser realizado através dos seguintes contadores do Performance Monitor:

Processor: %Processor Time – Este é o principal indicador de processamento na máquina. Altos valores podem não ser necessariamente ruins, desde que reflitam o processamento de consultas ao banco de dados. Entretanto, fatores externos podem consumir o recurso do processador e degradar o desempenho do SQL Server. O valor ideal recomendado é abaixo de 80% do poder de processamento máximo disponível.

Processor: %Privilege Time – Privilege Time ou Kernel Time é o tempo gasto pelo processador servindo às atividades do núcleo do Sistema Operacional, que corresponde às operações internas do Windows e Drivers de sistema.  O valor ideal recomendado é que se mantenha abaixo de 30% em relação ao processamento de máquina indicado por “%Processor Time”. ProcessUtilzation

Gráfico 1 – Servidor com 32 CPU

O gráfico 1 mostra que temos um consumo de CPU razoavelmente alto com tendência de alta e em alguns periodos com quase 100% de utilização.  O tempo de Kernel se manteve dentro do esperado: abaixo do número máximo recomendado de 30% da utilização do processador.

Process(sqlservr): % Processor Time: Este contador mostra qual a percentagem de tempo de processador está sendo usado para executar o processo Sqlservr (database engine). Idealmente, o tempo do processador deve ter um média abaixo de 50%  Se exceder uma média de 80% por um tempo contínuo (cinco minutos ou mais), então existe um afunilamento de CPU durante esse tempo, e você deve investigar a causa raiz.

Process(sqlservr): % Privileged Time – Este contador mostra qual a percentagem de tempo de processador “em modo kernel” está sendo usado para executar o processo Sqlservr (database engine). A recomendação é a mesma do Processor: %Privilege Time, ou seja, menor que 30% of Total %Processor

System: Processor Queue Lenght – É o tamanho da fila do processador, que equivale ao número total de threads enfileiradas esperando pelo recurso de CPU. O enfileiramento ocorre como consequência do alto consumo de processador e se tornam um indicativo do impacto do SQL Server em relação a máquina. O valor ideal recomendado é que essa fila não ultrapasse 2 vezes o número de CPU. QueueLegth

Gráfico 2 – Servidor com 32 CPU

O gráfico 2 mostra que apesar do consumo alto de CPU, não há problemas relacionados ao enfileiramento no processador.

System: Context Switches/sec – A quantidade de troca de contexto em um SQL Server deve se manter baixa mesmo sob carga. Um aumento no indicador Context Switches/sec ocorre devido a execução de threads de alta prioridade, como as Interrupções (INT), Asynchronous Procedure Call (APC) e Deferred Procedure Call (DPC) ou se houver um grande número de chamadas ao Kernel (System Calls/sec) ou disparo de exceções (Exception Dispatches/sec). O valor ideal recomendado é de no máximo 10000 por CPU.

ContextSwitch Gráfico 3 – Servidor com 32 CPU

O número referente ao Context Switche se manteve dentro dos parametros esperados, sendo um valor aceitável até 320 mil trocas por segundo.

System: Exception Dispatches/sec – Corresponde ao mecanismo de controle de tratamento de erros. Sempre que um evento de exceção é gerado, ocorre uma interrupção em Kernel para iniciar esse tratamento. Esse indicador deve ser próximo de zero.

System: System Calls/sec – As chamadas de sistema ocorrem quando uma aplicação realiza uma chamada a uma rotina de sistema, realizando a troca de contexto entre uma thread em modo usuário para modo Kernel. Não encontrei um valor ideal para esse indicador.

Referências:

Monitoring CPU Usage

http://msdn.microsoft.com/en-us/library/aa173932(SQL.80).aspx

Establishing a Performance Baseline

http://msdn.microsoft.com/en-us/library/ms190943(v=sql.110).aspx