Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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