Categorias
Monitoramento SQL Server Virtual PASS BR

Performance Counter: Subsistema de Discos

Os administradores de storages estão constantemente tentando maximizar o desempenho de acesso ao disco e problemas podem ser o resultado de qualquer coisa a partir de um componente configurado incorretamente até uma volume de carga extramamente grande. E aqui entra, na minha visão, a “briga” entre o DBA e o Administrator de Storage mas essa é uma historia longa. Voltando ao assunto, os bancos de dados estão armazenados em discos (ou pelo menos até a chegada do SQL Server 2014, o recurso de IN-Memory OLT, conhecido tambem por HEKATON, passa a armazenas dados em memoria) que ao contrário da memória RAM, são mídias não-voláteis.

Utilização de Disco

A utilização do recurso de disco pode ser medida através de:

  • Operações de I/O por segundo (IOPS) – Número de operações realizadas por segundo
  • Taxa de Transferência (Throughput) – Quantidade de dados (em Megabytes) transferidos

Os contadores utilizados para medir as informações são:

Logical Disk: Disk Reads/sec e Disk Write/sec – São respectivamente ao número de operações de leitura e escrita realizadas realizadas no volume ou disco. Valores abaixo de 100 IOPS são considerados baixos.
Logical Disk: Avg. Disk Read Bytes/Sec e Avg. Disk Write Bytes/Sec – Taxas de transferência para escrita e leitura no subsistema de disco. Valores abaixo de 20MB são considerados baixos.

TotalIOPSGráfico 1 – Total de IOPS

O gráfico 1 mostra o consumo de IO do subsistema de disco, onde a utilização maxima chega perto dos 20 mil IOPS. Também é possivel notar que a maior concentração na utilização do subsistema de disco para leitura, visto que a gravação de dados consome pouco recurso.

DiscoThroughput

Figura 2 – Total de Throughput

Tempo de Resposta

Podemos definir latência ou tempo tempo de resposta como: uma medida de dealy(tempo de atraso) desde o momento de uma requisição de IO é criado, até ao momento em que a requisição de IO é completada.

Através de indicadores abaixo é possível dimensionar o impacto da utilização do subsistema de disco.

Logical Disk: Avg. Disk sec/Read e Avg. Disk sec/Write – É o tempo médio gasto em leitura e escrita de uma operação de I/O no disco. Esse indicador corresponde ao tempo de resposta do disco, sendo recomendado valores inferiores a 0.020 – equivalente a 20 milissegundos.

Logical Disk: Current Disk Queue Lenght – Informa a fila de cada volume ou disco. O valor ideal da fila de disco é zero, porém, existe uma tolerância de até 2 operações de I/O por disco físico.

DiscoTempoResposta

Gráfico 3 – Tempo de Resposta

O gráfico 3 mostra que a fila de disco está alta porém o tempo de resposta do subsistema de disco nao ultrapassa 8 milisegundos ou 0.08. Nesse caso o enfileiramento de disco não está atrapalhando o tempo de resposta de IO.

Referências:

Windows Performance Monitor Disk Counters Explained

http://blogs.technet.com/b/askcore/archive/2012/03/16/windows-performance-monitor-disk-counters-explained.aspx

Measuring Disk Latency with Windows Performance Monitor (Perfmon)

http://blogs.technet.com/b/askcore/archive/2012/02/07/measuring-disk-latency-with-windows-performance-monitor-perfmon.aspx

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

Categorias
Monitoramento Troubleshooting Virtual PASS BR

Performance Counter: você sabe o que monitorar?

Monitorar seu ambiente é sempre uma atividade legal, seja ela para achar a causa raiz de um problema (reativo) ou simplesmente para montar uma baseline (proativo). Mas o que eu devo monitorar? O que é importante coletar e como relacionar isso ao meu problema? Primeiramente tudo começa na escolha dos contadores de performance e isso concerteza irá fazer toda diferença no futuro. Aqui estão os contadores que utilizo para gerar uma baseline.

Performance Counter relacionados ao Sistema Operacional

Logical Disks
  • Avg Disk Bytes/Read
  • Avg Disk Bytes/Write
  • Avg Disk Sec/Read
  • Avg Disk Sec/Transfer
  • Avg Disk Sec/Write
  • Current Disk Queue Length
  • Disk Bytes/sec
  • Disk Read Bytes/sec
  • Disk Write Bytes/sec
  • Disk Reads/sec
  • Disk Transfers/sec
  • Disk Writes/sec
Memory
  • %Committed Bytes In Use
  • Available MB
  • Committed Bytes
  • Free System Page Table Entries
  • Pool Nonpaged Bytes
  • Pool Paged Bytes
Network Interfaces
  • Bytes Received/sec
  • Bytes Sent/sec
  • Bytes Total/sec
Processor
  • %Processor Time
  • %Privileged Time
System
  • Context Switches/sec
  • Exception Dispatches/sec
  • Processor Queue Length
  • System Calls/sec

Performance Counter relacionados ao SQL Server

Buffer Manager
  • Buffer cache hit ratio
  • Checkpoint Page/Sec
  • Database pages
  • Free list stalls/sec
  • Free pages (<= 2008R2)
  • Lazy writes/sec
  • Page life expectancy
  • Page lookups/sec
  • Page reads/sec
  • Procedure cache pages
  • Readahead pages/sec
  • Stolen pages (<= 2008R2)
  • Target pages 
  • Total pages (<= 2008R2)
General Statistics
  • Connection Reset/sec
  • Logins/sec
  • Logouts/sec
  • User   Connections
SQL Statistics
  • Batch Requests/sec
  • Safe Auto-Params/sec
  • Forced Parametrizations/sec
  • SQL Compilations/sec
  • SQL Re-Compilations/sec
Memory Manager
  • Free Memory (KB) (=2012)
  • Target Server Memory (KB) (=2012)
  • Stolen Server Memory (KB) (=2012)
  • Total Server Memory (KB) (=2012)

Com esses contadores, consigo montar uma visão geral de como está a saúde do meu ambiente. Esse foi o primeiro post de uma serie sobre monitoramento e o que tenho feito para monitorar meu ambiente.

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

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

Monitoring Memory Usage
http://msdn.microsoft.com/en-us/library/aa905152(SQL.80).aspx

SQL Server: Buffer Manager Object
http://msdn.microsoft.com/en-us/library/ms189628.aspx

SQL Server: General Statistics
http://msdn.microsoft.com/en-us/library/ms190697.aspx

SQL Server: SQL Statistics Object
http://msdn.microsoft.com/en-us/library/ms190911.aspx