LWLock:pg_stat_statements - Amazon Relational Database Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

LWLock:pg_stat_statements

L’evento di attesa LWLock:pg_stat_statements si verifica quando l’estensione pg_stat_statements blocca in modo esclusivo la tabella hash che tiene traccia delle istruzioni SQL. Ciò accade nei seguenti scenari:

  • Quando il numero di istruzioni tracciate raggiunge il valore del parametro pg_stat_statements.max configurato ed è necessario lasciare spazio a ulteriori voci, l’estensione esegue un ordinamento in base al numero di chiamate, rimuove il 5% delle istruzioni meno eseguite e ripopola l’hash con le voci rimanenti.

  • Quando pg_stat_statements esegue un’operazione garbage collection sul file pgss_query_texts.stat su disco e riscrive il file.

Versioni del motore supportate

Queste informazioni relative all’evento di attesa sono supportate per tutte le versioni di RDS per PostgreSQL.

Context

Comprendere l’estensione pg_stat_statements: l’estensione pg_stat_statements tiene traccia delle statistiche di esecuzione delle istruzioni SQL in una tabella hash. L’estensione tiene traccia delle istruzioni SQL fino al limite definito dal parametro pg_stat_statements.max. Questo parametro determina il numero massimo di istruzioni che possono essere tracciate che corrisponde al numero massimo di righe nella vista pg_stat_statements.

Persistenza delle statistiche delle istruzioni: l’estensione mantiene le statistiche delle istruzioni tra i riavvii dell’istanza mediante:

  • Scrittura di dati in un file denominato pg_stat_statements.stat

  • Utilizzo del parametro pg_statements.save per controllare il comportamento di persistenza

Quando pg_statements.save è impostato su:

  • on (impostazione predefinita): le statistiche vengono salvate all’arresto e ricaricate all’avvio del server

  • off: le statistiche non vengono salvate all’arresto né ricaricate all’avvio del server

Archiviazione del testo delle query: l’estensione archivia il testo delle query tracciate in un file denominato pgss_query_texts.stat. Questo file può aumentare fino a raddoppiare la dimensione media di tutte le istruzioni SQL tracciate prima che si verifichi la rimozione di oggetti inutili. L’estensione richiede un blocco esclusivo sulla tabella hash durante le operazioni di pulizia e riscrittura del file pgss_query_texts.stat.

Processo di deallocazione delle istruzioni: quando il numero di istruzioni tracciate raggiunge il limite pg_stat_statements.max ed è necessario tenere traccia delle nuove istruzioni, l’estensione:

  • Acquisisce un blocco esclusivo (LWLock:pg_stat_statements) sulla tabella hash.

  • Carica i dati esistenti nella memoria locale.

  • Esegue un ordinamento rapido in base al numero di chiamate.

  • Rimuove le istruzioni meno chiamate (inferiore al 5%).

  • Ripopola la tabella hash con le voci rimanenti.

Monitoraggio della deallocazione delle istruzioni: in PostgreSQL 14 e versioni successive, è possibile monitorare la deallocazione delle istruzioni utilizzando la vista pg_stat_statements_info. Questa visualizzazione include una colonna dealloc che mostra quante volte le istruzioni sono state deallocate per fare spazio a quelle nuove

Se la deallocazione delle istruzioni si verifica frequentemente, ciò comporterà una rimozione di oggetti inutili più frequente del file pgss_query_texts.stat su disco.

Probabili cause di aumento delle attese

Le cause tipiche dell’aumento delle attese di LWLock:pg_stat_statements includono:

  • Un aumento del numero di query univoche utilizzate dall’applicazione.

  • Il valore del parametro pg_stat_statements.max è piccolo rispetto al numero di query univoche utilizzate.

Azioni

Consigliamo azioni diverse a seconda delle cause dell’evento di attesa. È possibile identificare gli eventi LWLock:pg_stat_statements utilizzando Approfondimenti sulle prestazioni di Amazon RDS o eseguendo una query sulla vista pg_stat_activity.

Modificare i seguenti parametri pg_stat_statements per controllare il comportamento di tracciamento e ridurre gli eventi di attesa LWLock:pg_stat_statements.

Disabilitare il parametro pg_stat_statements.track

Se l’evento di attesa LWLock:pg_stat_statements ha un impatto negativo sulle prestazioni del database ed è necessaria una soluzione rapida prima di un’ulteriore analisi della vista pg_stat_statements per identificare la causa principale, il parametro pg_stat_statements.track può essere disabilitato impostandolo su none. In questo modo verrà disabilitata la raccolta delle statistiche sulle istruzioni.

Aumentare il parametro pg_stat_statements.max

Per ridurre la deallocazione e minimizzare la rimozione di oggetti inutili del file pgss_query_texts.stat su disco, aumentare il valore del parametro pg_stat_statements.max. Il valore predefinito è 5,000.

Nota

Il parametro pg_stat_statements.max è statico. È necessario riavviare l’istanza database per applicare le modifiche a questo parametro.

Disabilitare il parametro pg_stat_statements.track_utility

È possibile analizzare la vista pg_stat_statements per determinare quali comandi di utilità stanno consumando la maggior parte delle risorse monitorate da pg_stat_statements.

Il parametro pg_stat_statements.track_utility controlla se il modulo tiene traccia dei comandi di utilità, che includono tutti i comandi tranne SELECT, INSERT, UPDATE, DELETE e MERGE. Questo parametro è impostato su on per impostazione predefinita.

Ad esempio, quando l’applicazione utilizza molte query sui punti di salvataggio, che sono intrinsecamente univoche, può aumentare la deallocazione delle istruzioni. Per risolvere questo problema, è possibile disabilitare il parametro pg_stat_statements.track_utility per impedire a pg_stat_statements di monitorare le query sui punti di salvataggio.

Nota

Il parametro pg_stat_statements.track_utility è un parametro dinamico. È possibile modificarne il valore senza riavviare l’istanza database.

Esempio di query univoche sui punti di salvataggio in pg_stat_statements
query | queryid -------------------------------------------------+--------------------- SAVEPOINT JDBC_SAVEPOINT_495701 | -7249565344517699703 SAVEPOINT JDBC_SAVEPOINT_1320 | -1572997038849006629 SAVEPOINT JDBC_SAVEPOINT_26739 | 54791337410474486 SAVEPOINT JDBC_SAVEPOINT_1294466 | 8170064357463507593 ROLLBACK TO SAVEPOINT JDBC_SAVEPOINT_65016 | -33608214779996400 SAVEPOINT JDBC_SAVEPOINT_14185 | -2175035613806809562 SAVEPOINT JDBC_SAVEPOINT_45837 | -6201592986750645383 SAVEPOINT JDBC_SAVEPOINT_1324 | 6388797791882029332

PostgreSQL 17 introduce diversi miglioramenti per il tracciamento dei comandi di utilità:

  • I nomi dei punti di salvataggio vengono ora visualizzati come costanti.

  • Gli ID di transazione globali (GID) dei comandi di commit in due fasi vengono ora visualizzati come costanti.

  • I nomi delle istruzioni DEALLOCATE vengono visualizzati come costanti.

  • I parametri CALL vengono ora visualizzati come costanti.