Checklist: Performance do Servidor (Windows)

Podemos criar um breve checklist sobre como validar a infraestrutura de um servidor SQL usando o Performance Monitor.

Artigo complementar: Checklist: Performance do Servidor (SQL)

Desafio: Analisando Servidor com Perfmon

A análise da infraestrutura sob a ótica do Windows é dividida nos seus principais recursos: CPU, memória, storage e rede.

CPU

Monitoração do consumo de CPU no servidor.

  • Processor: %Processor Time: verificar se o consumo de CPU está abaixo de 80%. É importante manter uma margem de 10-20% para permitir um eventual pico de utilização.
  • Processor: %Privileged Time: verificar se o consumo em Kernel Time está abaixo de 30%. Não faz sentido um servidor de banco de dados gastar mais tempo em Kernel executando tarefa de sistemas ao invés de executar as queries SQL.
  • System: Processor Queue Length: monitorar esse valor ao longo do tempo e comparar com o consumo de CPU. Alto consumo de CPU associado a filas de processador indicam que existem processos externos afetando o desempenho do SQL Server.

 

Memória

Monitoração da memória disponível no SO e consumo interno da Kernel.

  • Memory: Available MB: monitorar esse contador ao longo do tempo e garantir que ele está sempre acima de 100MB. Caso haja momentos em que esse indicador fique muito baixo, recomenda-se configurar ou diminuir o “Max Server Memory” do servidor SQL Server e garantir que sempre haja memória disponível.
  • Memory: Pool Nonpaged Bytes: analisar se a quantidade de Nonpaged Pool se mantém constante ao longo dos dias ou se há indícios de memory leak. Isso pode indicar um problema em drivers de Kernel e afeta a estabilidade do SO.
  • Memory: Pool Paged Bytes: analisar se a quantidade de Paged Pool se mantém constante ao longo dos dias ou se há indícios de memory leak. Isso pode indicar um problema em drivers de Kernel e afeta a estabilidade do SO.

 

Storage

A análise do storage foi detalhada no artigo Monitorando o Storage. O ideal é conduzir uma análise individualizada por volume do disco ao invés de consolidar em uma única análise.

A carga pode ser medida em IOPS. Altos valores de IOPS causam gargalos em discos mecânicos FC, SCSI, SAS, SATA.

  • Disk Reads/sec: calcular o número de leituras em um disco de dados. Na teoria, essas leituras possuem característica aleatória e em blocos de 8Kb. No entanto, é comum encontrar servidores realizando table scan e causando leituras sequenciais e blocos maiores que 8Kb. Portanto, é possível determinar a natureza da leitura (aleatória ou sequencial) através do tamanho dos blocos de escrita (contador Disk Bytes/Read). Valores de referência:
    • 100 IOPS = Disco 7200 RPM
    • 150 IOPS = Disco 10k RPM
    • 175 IOPS = Disco 15k RPM
    • 10.000 IOPS = Disco SSD
  • Disk Writes/sec: ignorar o número de escritas no disco de dados. Ignorar esse contador nos discos do tempdb: log e dados. Calcular o IOPS nos discos de log. Idealmente esse valor deve ficar abaixo de 200, embora seja aceitável atingir até 1000 IOPS. Normalmente as escritas são aceleradas através de um write-cache no storage.
  • Disk Transfers/sec: soma dos IOPS de escrita e leitura. Utilizar esse contador quando precisar de uma análise simplificada sobre a carga.

A carga pode ser medida em MB/s. Altos valores na taxa de transferência causam gargalos nas interfaces de disco e cabos de interconexão

  • Disk Read Bytes/sec: calcular a taxa de transferência de leitura. Não existe um limite para esse valor. Sugestão de
    • 20 MB/s: baixo
    • 100 MB/s: normal
    • 200 MB/s: alto (equivalente a Fiber Channel 2Gbit)
  • Disk Write Bytes/sec: calcular a taxa de transferência de escrita. Entretanto, existem algumas considerações:
    • Disco de dados: fluxo de escrita é causado pelo processo de checkpoint, que pode aumentar a concorrência de escrita e afetar indiretamente a latência do storage
    • Disco de log: quase sempre a taxa de escrita é baixa (abaixo de 20MB/s) porque os pacotes são pequenos
  • Disk Bytes/sec: soma da taxa de transferência de leitura e escrita. Utilizar esse contador quando precisar de uma análise simplificada sobre a carga.

A latência do disco é a principal medida em relação ao storage:

  • Avg Disk Sec/Read: Validar se a latência do disco está dentro da expectativa. Em geral, adotam-se valores máximos de 50 a 100ms como tempo de respostas para o disco de dados. Uma sugestão de tempos:
    • <1ms : inacreditável
    • <3ms : excelente
    • <5ms : muito bom
    • <10ms : dentro do esperado
    • <20ms : razoável
    • <50ms : limite
    • >100ms : ruim
    • > 1 seg : contenção severa de disco
    • > 15 seg : problemas graves com o storage
  • Avg Disk Sec/Write: Validar se a latência do disco está dentro da expectativa. Ignore esse valor para os discos de dados. Utilize esse contador para os discos de log com latências reduzidas:
    • <1ms : excelente
    • <3ms : bom
    • <5ms : razoável
    • <10ms : limite
    • >20ms : ruim
    • > 1 seg : contenção severa de disco
    • > 15 seg : problemas graves com o storage
  • Avg Disk Sec/Transfer: Média ponderada entre os tempos de leitura e escrita. Utilizar esse contador quando precisar de uma análise simplificada sem a necessidade de olhar dois contadores (Read e Write) ao mesmo tempo.

Adicionalmente, pode ser incluído o contador de “outstanding I/O”.

  • Current Disk Queue Length: corresponde ao número de requisições de I/O que estão ativas esperando por uma resposta do storage ou enfileiradas na HBA. Infelizmente esse contador é confundido com o “Avg Disk Queue Length”, que não possui o mesmo significado. Se o tempo de latência estiver adequado, é possível fazer o ajuste do parâmetro de “Queue Depth” da placa HBA. Dessa forma, o host pode aumentar o número de I/O enviados ao storage e diminuir a fila da HBA. Esse é um parâmetro específco por placa (ex: Emulex, QLogic, etc).

 

Rede

Monitoração do tráfego de rede.

  • Bytes Received/sec: calcular a taxa de dados recebidos pela rede. Esse valor é sempre baixo, pois corresponde aos pacotes com comandos. A exceção é durante a recepção de cargas BCP. Valores de referência:
    • 5MB/s : normal
    • 10MB/s: alto
    • 100MB/s: muito alto (equivalente a uma placa Ethernet 1Gbit)
  • Bytes Sent/sec: calcular a taxa de dados enviados pela rede. Esse valor é superior à quantidade de dados recebidos, pois corresponde ao conjunto de dados a ser retornado ao cliente.
    • 10MB/s : normal
    • 20MB/s : alto
    • 100MB/s: muito alto (equivalente a uma placa Ethernet 1Gbit)
  • Bytes Total/sec: soma de dados recebidos e enviados pela rede. Utilizar esse contador quando precisar de uma análise simplificada do tráfego de rede.

 

Referência

Os demais artigos dessa série estão listados abaixo.

Artigo: Perfmon- Falso Sentido de Monitoração

Artigo: Os 7 Grandes Mitos do Perfmon:

Artigo: Contadores do Perfmon

Desafio: Analisando Servidor com Perfmon

Artigo: Monitorando com o Perfmon

Checklist