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”.
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.
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.
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
2 respostas em “Performance Counter: Processador”
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
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!