Salta al contenuto

Come posso risolvere gli errori "Statement timeout" per le query eseguite sul mio cluster di database Aurora compatibile con PostgreSQL?

5 minuti di lettura
0

Desidero risolvere gli errori di timeout delle istruzioni per le query eseguite sul mio cluster di database Amazon Aurora compatibile con PostgreSQL.

Risoluzione

Importante: Performance Insights giungerà al termine del suo ciclo di vita il 30 giugno 2026. Entro tale data puoi passare alla modalità Avanzata di Database Insights. Se non esegui l'aggiornamento, i cluster di database che utilizzano Performance Insights passeranno automaticamente alla modalità Standard di Database Insights. Solo la modalità Avanzata di Database Insights supporta i piani di esecuzione e l'analisi on demand. Se i cluster dovessero passare automaticamente alla modalità Standard, potresti non essere in grado di utilizzare queste funzionalità sulla console. Per attivare la modalità Avanzata, consulta Attivazione della modalità avanzata di Database Insights per Amazon RDS e Attivazione della modalità avanzata di Database Insights per Amazon Aurora.

Se le query non vengono eseguite entro il tempo specificato dal parametro statement_timeout, il parametro statement_timeout annulla la query. Ricevi il seguente messaggio di errore:

"ERROR: canceling statement due to statement timeout."

Per risolverlo, intraprendi le seguenti azioni.

Controlla il parametro statement_timeout configurato

Per controllare il parametro statement_timeout nel gruppo di parametri del cluster di database o nel gruppo di parametri del database, esegui questa query SELECT:

SELECT name, setting, unit, context, source FROM pg_settings WHERE name = 'statement_timeout';

Output atteso:

       name        | setting | unit | context |       source
-------------------+---------+------+---------+--------------------
 statement_timeout | 5000    | ms   | user    | configuration file

Nota: nell'esempio di output, il parametro statement_timeout ha un valore di 5.000 millisecondi. Il campo "source" mostra "configuration file", il che indica che il parametro è impostato a livello di gruppo di parametri del cluster.

Quindi controlla il parametro statement_timeout a livello di ruolo e di database.

Per verificare le configurazioni a livello di ruolo per tutti i ruoli nel cluster di database, esegui questa query:

SELECT r.rolname, d.datname, s.setconfig
FROM pg_db_role_setting s
JOIN pg_roles r ON r.oid = s.setrole
LEFT JOIN pg_database d ON d.oid = s.setdatabase
WHERE s.setconfig::text LIKE '%statement_timeout%'
ORDER BY r.rolname;

Per verificare le configurazioni a livello di database per tutti i database del cluster, esegui questa query:

SELECT d.datname, rs.setconfig
FROM pg_db_role_setting rs
JOIN pg_database d ON d.oid = rs.setdatabase
WHERE rs.setrole = 0;

Esamina l'output per identificare eventuali configurazioni statement_timeout impostate a livello di ruolo o di database che potrebbero sovrascrivere l'impostazione a livello di cluster.

Nota: i parametri statement_timeout impostati con ALTER ROLE SET non ereditano i ruoli secondari. Se configuri il parametro statement_timeout per un ruolo, puoi utilizzare il parametro solo quando accedi a quel ruolo. Per ulteriori informazioni, consulta ANALYZE sul sito web PostgreSQL.

Identifica le query SQL annullate

Visualizza il file di log degli errori di PostgreSQL, quindi determina se il parametro log_min_error_statement è impostato su ERROR o su una gravità inferiore. Dopo aver identificato l'istruzione non riuscita, individua i nomi delle tabelle e le query SQL che hanno dato esito negativo. Per ulteriori dettagli, consulta Informazioni sul parametro log_line_prefix.

Identifica la causa dell'esecuzione lenta delle query

Se individui la query SQL che ha dato esito negativo, utilizza CloudWatch Database Insights per identificare le transazioni bloccate.

Per analizzare le prestazioni utilizzando CloudWatch Database Insights, completa i seguenti passaggi:

  1. Apri la console Amazon Relational Database Service (Amazon RDS).
  2. Nel pannello di navigazione, scegli Database.
  3. Seleziona il cluster di database Aurora PostgreSQL.
  4. Scegli la scheda Monitoraggio.
  5. Scegli Visualizza dettagli per Performance Insights.
  6. Esamina il carico del database. Per identificare le transazioni bloccate, puoi raggruppare il carico del database per eventi di attesa, query SQL, host o utenti.

Se il problema si ripresenta regolarmente, configura il parametro log_min_duration_statement per l'istanza database e utilizza il modulo auto_explain. Per ulteriori informazioni, consulta How can I log execution plans of queries for Amazon RDS PostgreSQL or Aurora PostgreSQL to tune query performance? (Come posso ottimizzare le prestazioni delle query registrando i piani di esecuzione delle query per Amazon RDS PostgreSQL o Aurora PostgreSQL?)

Puoi utilizzare i comandi EXPLAIN e EXPLAIN ANALYZE per ottenere il piano di esecuzione della query. Per ulteriori informazioni, consulta Come posso identificare e risolvere i problemi di prestazioni e di query a esecuzione lenta nella mia istanza database Amazon RDS per PostgreSQL o Aurora compatibile con PostgreSQL?

Verifica la presenza di righe inutilizzate nelle tabelle di origine

Le righe o le tuple inutilizzate possono aumentare il tempo di una query SELECT. Per verificare la presenza di un numero elevato di righe inutilizzate nelle tabelle di origine, esegui questa query:

SELECT * FROM pg_stat_user_tables WHERE relname = 'table_name';

Nota: sostituisci table_name con il nome della tabella di origine.

Informazioni correlate

How do I end long-running queries in my Amazon RDS for PostgreSQL or Aurora PostgreSQL-Compatible DB instance? (Come posso terminare le query di lunga durata nella mia istanza database Amazon RDS per PostgreSQL o Aurora compatibile con PostgreSQL?)

Come posso identificare cosa ha bloccato una query nella mia istanza database Amazon RDS PostgreSQL o Aurora PostgreSQL?

AWS UFFICIALEAggiornata 6 mesi fa