Ir para o conteúdo

Como soluciono o problema do aumento do meu DiskQueueDepth no Amazon RDS para PostgreSQL?

4 minuto de leitura
0

Quero solucionar o problema do aumento do meu DiskQueueDepth no Amazon Relational Database Service (Amazon RDS) para PostgreSQL.

Breve descrição

DiskQueueDepth é o número de solicitações de entrada e saída (E/S) que foram enviadas pela aplicação, mas ainda não foram enviadas ao dispositivo de armazenamento. As solicitações estão pendentes porque o disco ou o armazenamento estão ocupados com outras solicitações.

Um DiskQueueDepth alto indica que as solicitações de E/S aumentaram mais rápido do que o sistema de armazenamento pode processar. O Amazon RDS relata essa métrica como uma média em intervalos de um minuto. É uma prática recomendada definir um comprimento de fila de 1 para cada 1.000 IOPS disponíveis.

Observação: para medir o desempenho de E/S, verifique o throughput e o número de operações de E/S da instância.

Resolução

Para solucionar o problema do aumento do seu DiskQueueDepth no Amazon RDS para PostgreSQL, faça o seguinte:

Identifique um DiskQueueDepth alto

Para identificar um DiskQueueDepth alto, verifique o seguinte:

  • Verifique suas métricas do Amazon CloudWatch quando tiver problemas de desempenho. Procure picos na métrica DiskQueueDepth que sejam maiores do que o normal. Se o DiskQueueDepth permanecer elevado por um longo período, as consultas aguardarão mais tempo antes de serem executadas.
  • Verifique os limites do seu tipo de instância. Confirme se as métricas ReadIOPS, WriteIOPS, ReadThroughput e WriteThroughput atingem seus limites de tipo de instância.
  • Verifique suas métricas de ReadThroughput and WriteThroughput. O CloudWatch apresenta esses dados em bytes por segundo, portanto, para uma interpretação mais clara, converta esses valores para MB/s ou GB/s. Para descobrir se você atingiu o limite de throughput alocado, some as duas métricas no mesmo período. Para obter detalhes sobre o throughput alocado para sua instância, consulte o artigo Tipos de instâncias do Amazon RDS.
  • Verifique sua métrica EBSByteBalance%. Se EBSByteBalance% estiver em zero ou próximo a zero, a instância está consumindo throughput alto. Além disso, um saldo de bytes de zero indica controle de utilização em sua largura de banda.

Verifique o tipo e tamanho do seu armazenamento

Para verificar o tipo e o tamanho do seu armazenamento, realize as seguintes ações:

  • Otimize seu workload. Explore as opções disponíveis para ajustar e melhorar a eficiência do seu workload.
  • Para SSD de uso geral (gp2), certifique-se de que o tamanho do seu armazenamento tenha IOPS e throughput de linha de base suficientes.
  • Para obter mais IOPS ou gp3, io1 e io2 provisionados, ajuste seu workload ou escale para uma instância maior com maior capacidade de CPU, memória e E/S.

Verifique se há aumentos repentinos de tráfego

Picos inesperados na atividade do banco de dados podem levar ao aumento de DiskQueueDepth. Para identificar picos em suas conexões, realize as seguintes ações:

  • Verifique o grafo de DatabaseConnections em suas métricas do Amazon CloudWatch. Muitas conexões simultâneas podem provocar operações pesadas de leitura e gravação.
  • Obtenha um comprimento de fila de 1 para cada 1.000 IOPS disponíveis. (Essa é a linha de base para volumes de SSD de uso geral e a quantidade provisionada para volumes de SSD com IOPS provisionadas.)
  • Monitore o desempenho da sua aplicação e faça ajustes com base nos seus requisitos.

Verifique se há problemas de microexpansão

Se sua instância não atingir o limite de throughput ou IOPS, mas tiver alta latência e comprimento de fila, você poderá ter um microexpansão em sua instância. Para resolver esse problema, consulte Como faço para identificar se meu volume do EBS está sofrendo microexpansão e, em seguida, garantir que isso não afete o desempenho? Além disso, certifique-se de que o Monitoramento aprimorado esteja ativado e defina a granularidade para 1 segundo para identificar se o microexpansão é um problema.

Otimize consultas incorretas

Para otimizar consultas incorretas, realize as seguintes ações:

  • Para verificar os tipos de consulta que são executados em períodos de DiskQueueDepth alto, use o Insights de Performance.
  • Para gerar planos de execução de consultas, use EXPLAIN para identificar oportunidades de otimização. Para obter mais informações, consulte EXPLAIN no site do PostgreSQL.
  • Verifique se há varreduras completas da tabela, junções ineficientes ou índices ausentes que possam causar E/S excessiva.