Como soluciono problemas de latência de volumes do Amazon EBS causados por uma limitação de IOPS na minha instância do Amazon RDS?

Data da última atualização: 11/10/2021

Tenho uma instância de banco de dados do Amazon Relational Database Service (Amazon RDS). Quero solucionar problemas de latência dos volumes do Amazon Elastic Block Store (Amazon EBS) na minha instância do Amazon RDS.

Resolução

Os motivos mais comuns para latência em uma instância do Amazon RDS causada por um gargalo de IOPS ou taxa de transferência incluem o seguinte:

  • Um gargalo de IOPS no nível da instância
  • Um gargalo de IOPS no nível do volume
  • Um gargalo de taxa de transferência no nível da instância
  • Um gargalo de taxa de transferência no nível do volume
  • Micro-estouro

Use as etapas de solução de problemas a seguir com base no seu caso de uso.

Instância do RDS com SSD de uso geral (gp2)

Execute as seguintes verificações:

  1. Verifique as informações de configuração da instância do Amazon RDS, como a classe da instância de banco de dados e o tamanho do armazenamento. Estas informações podem ajudá-lo a rastrear os limites de IOPS e taxa de transferência. Você deve conhecer estes valores ao solucionar problemas que causam um gargalo de IOPS ou taxa de transferência.
  2. Use os gráficos do Amazon CloudWatch para verificar se há picos nos valores de DiskQueueDepth, ReadLatency eWriteLatency. Em circunstâncias normais, é uma prática recomendada usar um DiskQueueDepth de um por minuto para cada 1000 IOPS. Espera-se que a ReadLatency e a WriteLatency sejam inferiores a 10 milissegundos. Se você notar picos, identifique a hora do pico.
  3. Use os gráficos do CloudWatch para visualizar as métricas ReadIOPS eWriteIOPS. Verifique se o limite de IOPS foi violado no nível do volume durante o período de picos nos valores de DiskQueueDepth, ReadLatency e WriteLatency.
  4. Use o gráfico do CloudWatch para verificar se há uma queda no valor de BurstBalance. Esta verificação é aplicável apenas para volumes com tamanho inferior a 1 TB. Uma queda no valor de BurstBalance confirma a ocorrência de um gargalo de IOPS durante o período de tempo do pico.
  5. Use os gráficos do CloudWatch para visualizar as métricas ReadThroughput e WriteThroughput. Verifique se o limite de taxa de transferência foi violado no nível do volume durante o período de picos nos valores de ReadThroughput e WriteThroughput.
  6. Se você estiver usando uma classe de instância do RDS otimizada para EBS, use os gráficos do CloudWatch para verificar se há limitação de IOPS ou transferência. Para classes de instância com capacidade de intermitência, veja as métricas EBSIOBalance% e EBSByteBalance% nos gráficos do CloudWatch. Valores consistentemente baixos de EBSIOBalance% ou EBSByteBalance% indicam um gargalo de IOPS ou taxa de transferência no nível da instância.

A limitação de IOPS, taxa de transferência ou ambos indica que a IOPS ou a taxa de transferência é inadequada para seu workload no nível de armazenamento. Para corrigir o problema, faça o seguinte:

  • Localize as consultas SQL que criam mais carga no banco de dados e otimize as consultas. Se o workload for conforme o esperado ou não houver escopo para ajustar as consultas SQL, talvez seja necessário aumentar o tamanho do armazenamento para obter uma capacidade de IOPS maior.
    Observação: depois de aumentar o tamanho de armazenamento de uma instância do RDS, não é possível reduzir o tamanho para o valor anterior.
  • Considere alternar o volume de uso geral (gp2) para IOPS provisionadas (io1). Se a instância de banco de dados for Single-AZ e você estiver usando um grupo de parâmetro personalizado, alternar entre gp2 e io1 poderá causar um breve tempo de inatividade. Se sua instância for Multi-AZ, você não terá nenhum tempo de inatividade.
  • Se você notar a limitação de IOPS ou taxa de transferência no nível da instância, será necessário aumentar a escala da classe de instância para obter uma capacidade de IOPS ou throughput mais alta.

Instância do RDS com IOPS provisionadas (io1)

  1. Verifique as informações de configuração da instância do Amazon RDS, como a classe da instância de banco de dados e as IOPS provisionadas definidas, para determinar o limite de IOPS ou o limite de taxa de transferência para a classe de instância de banco de dados.
  2. Use os gráficos do CloudWatch para verificar se há picos nos valores de DiskQueueDepth, ReadLatency e WriteLatency. Em circunstâncias normais, é uma prática recomendada usar um DiskQueueDepth de um por minuto para cada 1000 IOPS. Espera-se que a ReadLatency ou a WriteLatency estejam dentro de 10 milissegundos. Se você notar picos, identifique a hora do pico.
  3. Use os gráficos do CloudWatch para visualizar as métricas ReadIOPS e WriteIOPS. Verifique se o limite de IOPS foi violado durante o período de picos nos valores de DiskQueueDepth, ReadLatency e WriteLatency.
  4. Use os gráficos do CloudWatch para visualizar as métricas ReadThroughput e WriteThroughput. Verifique se o limite de taxa de transferência foi violado durante o período de picos nos valores de ReadThroughput e WriteThroughput.
  5. Se você estiver usando uma classe de instância do RDS otimizada para EBS, use os gráficos do CloudWatch para verificar se há limitação de IOPS ou transferência. Para classes de instância com capacidade de intermitência, veja as métricas EBSIOBalance% e EBSByteBalance% nos gráficos do CloudWatch. Valores percentuais consistentemente baixos de EBSIOBalance% ou EBSByteBalance%, respectivamente, indicam um gargalo de IOPS ou throughput no nível da instância.

A limitação de IOPS ou transferência indica que a IOPS ou a taxa de transferência é inadequada para o workload no nível de armazenamento. Para corrigir o problema, faça o seguinte:

  • Localize as consultas SQL que criam mais carga no banco de dados e otimize as consultas. Se o workload for conforme o esperado ou não houver escopo para ajustar as consultas SQL, talvez seja necessário aumentar as IOPS provisionadas.
  • Se você notar a limitação de IOPS ou taxa de transferência no nível da instância, precisará aumentar a escala da classe de instância para obter uma taxa de transferência ou capacidade de IOPS mais alta.

Micro-estouro

Micro-bursting ocorre quando um volume do EBS “explode” com IOPS alto ou há taxa de transferência por períodos significativamente mais curtos do que o período de coleta. As métricas do CloudWatch são coletadas em um intervalo de 60 segundos. Como o volume aumenta com IOPS alto ou há taxa de transferência por um tempo menor do que o período de coleta, o CloudWatch não reflete a intermitência. Você pode usar o monitoramento avançado para identificar se o microbursting causa a latência. Ative o monitoramento aprimorado com uma granularidade de 1 segundo. Você pode usar as métricas de Leitura de ES/s e Gravação de ES/s para determinar a utilização real de IOPS. Você pode usar os KB/s de leitura eKb/s de gravação para determinar a utilização real da taxa de transferência por segundo. Para obter mais informações, consulte Descrições de métricas de monitoramento aprimorado.