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

Maníaco, entusiasta, fascinado, fanático por SQL Server e nas horas vagas um DBA que adora o que faz! Também possui certificações como: MCT, MCSE - Data Management and Analystics, MCSE - Data Plataform e MCSA - SQL Server 2016/2014/2012

2 Responses to “Performance Counter: Processador”

  1. Pedro Ferreira, Responder

    Viva,
    Relativamente ao Context Switches (por segundo) sempre “ouvi” dizer que idealmente o valor recomendado é abaixo dos 5000/Core.
    Não deverá ser?
    Continuação de bom trabalho!
    Pedro

    • Tiago Balabuch, Responder

      Olá Pedro,
      O texto abaixo eu retirei do relatório gerado pelo PAL (https://pal.codeplex.com/).
      “High context switching is only a problem if overall CPU is high as well. This analysis checks for high CPU, high privileged mode CPU, and high system context switches per sec.
      Threshold: As a general rule, context switching rates of greater than 5,000 per second per processor are considered a warning. If context switching rates exceed 10,000 per second per processor, then there is a constraint.”
      Eu entendo que o valor é por processador e não por core!
      Obrigado!

Responda