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
Comments
- Anonymous
June 28, 2016
Excelente