Salta al contenuto

Come posso risolvere i problemi relativi all'aumento del mio DiskQueueDepth in Amazon RDS per PostgreSQL?

4 minuti di lettura
0

Desidero risolvere i problemi relativi all'aumento del mio DiskQueueDepth in Amazon Relational Database Service (Amazon RDS) per PostgreSQL.

Breve descrizione

DiskQueueDepth è il numero di richieste di input e output (I/O) inviate dall'applicazione, ma non ancora inviate al dispositivo di archiviazione. Le richieste sono in sospeso perché il disco o lo spazio di archiviazione sono occupati con altre richieste.

Un DiskQueueDepth elevato indica che le richieste di I/O sono aumentate più velocemente di quanto il sistema di storage sia in grado di elaborare. Amazon RDS riporta questa metrica come media su intervalli di un minuto. È consigliabile impostare una lunghezza della coda pari a 1 per ogni 1.000 IOPS disponibili.

Nota: per misurare le prestazioni di I/O, controlla il throughput e il numero di operazioni I/O dell'istanza.

Risoluzione

Per risolvere i problemi relativi all'aumento di DiskQueueDepth in Amazon RDS per PostgreSQL, completa quanto segue:

Identifica il valore DiskQueueDepth elevato

Per identificare un DiskQueueDepth elevato, controlla quanto segue:

  • Controlla le metriche di Amazon CloudWatch in caso di problemi di prestazioni. Cerca picchi della metrica DiskQueueDepth più alti del normale. Se DiskQueueDepth rimane elevato per un periodo di tempo prolungato, le query attendono più a lungo prima di essere eseguite.
  • Controlla i limiti del tipo di istanza. Verifica se le metriche ReadIOPS, WriteIOPS, ReadThroughput e WriteThroughput raggiungono i limiti relativi ai tipi di istanza.
  • Controlla le metriche ReadThroughput e WriteThroughput. CloudWatch presenta questi dati in byte al secondo. Pertanto, per un'interpretazione più chiara, converti i valori in MB/s o GB/s. Per stabilire se hai raggiunto il limite di throughput assegnato, somma le due metriche per lo stesso periodo di tempo. Per dettagli sul throughput allocato all'istanza, consulta la documentazione sui tipi di istanza di Amazon RDS.
  • Controlla la metrica EBSByteBalance%. Se EBSByteBalance% è pari o vicino a zero, l'istanza utilizza un throughput elevato. Inoltre, un saldo in byte pari a zero indica una limitazione (della larghezza di banda della rete).

Controlla il tipo e le dimensioni dello storage

Per verificare il tipo e le dimensioni dello storage, intraprendi le seguenti azioni:

  • Ottimizza il carico di lavoro. Esplora le opzioni disponibili per ottimizzare e migliorare l'efficienza del carico di lavoro.
  • Per i volumi SSD per uso generico (gp2), assicurati che le dimensioni dello storage abbiano IOPS e throughput di base sufficienti.
  • Per ottenere più IOPS o per eseguire il provisioning di gp3, io1 e io2, ottimizza il carico di lavoro o passa a un'istanza più grande con maggiore capacità di CPU, memoria e I/O.

Verifica eventuali aumenti improvvisi del traffico

Picchi imprevisti nell'attività del database potrebbero comportare un aumento del valore DiskQueueDepth. Per identificare i picchi nelle connessioni, intraprendi le seguenti azioni:

  • Controlla il grafico DatabaseConnections nelle metriche di Amazon CloudWatch. Troppe connessioni concorrenti potrebbero comportare operazioni di lettura e scrittura pesanti.
  • Raggiungi una lunghezza della coda di 1 per ogni 1.000 IOPS disponibili (questa è il valore base per i volumi SSD per uso generico e la quantità assegnata per i volumi SSD IOPS con provisioning).
  • Monitora le prestazioni delle applicazioni e apporta le modifiche necessarie in base alle esigenze.

Verifica la presenza di eventi di micro-bursting

Se l'istanza non raggiunge il limite di throughput o IOPS, ma presenta latenza e lunghezza della coda elevate, nell'istanza potrebbero essere presenti eventi di micro-bursting. Per ulteriori informazioni, consulta Come posso verificare se il mio volume EBS subisce eventi di micro-bursting e assicurarmi che ciò non influisca sulle prestazioni? Inoltre, assicurati che Monitoraggio avanzato sia attivo, quindi imposta la granularità su 1 secondo per identificare se gli eventi di micro-bursting sono un problema.

Ottimizza le query non efficienti

Per ottimizzare le query non efficienti, intraprendi le seguenti azioni:

  • Per verificare i tipi di query eseguiti in periodi di tempo con DiskQueueDepth elevato, utilizza Performance Insights.
  • Per generare piani di esecuzione delle query, identifica le opportunità di ottimizzazione utilizzando EXPLAIN. Per ulteriori informazioni, consulta EXPLAIN sul sito web PostgreSQL.
  • Verifica la presenza di scansioni complete delle tabelle, join inefficienti o indici mancanti che potrebbero causare un I/O eccessivo.