LWLock:pg_stat_statements - Amazon Aurora

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 LWLock aspetta:pg_stat_statements si verifica quando l'estensione blocca in modo esclusivo la tabella hash che tiene traccia delle istruzioni SQL. pg_stat_statements Ciò accade nei seguenti scenari:

  • Quando il numero di istruzioni tracciate raggiunge il valore del pg_stat_statements.max parametro configurato ed è necessario fare spazio per altre 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'garbage collectionoperazione sul file su disco e riscrive il pgss_query_texts.stat file.

Versioni del motore supportate

Queste informazioni sugli eventi di attesa sono supportate per tutte le versioni di .

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 sulle istruzioni: l'estensione mantiene le statistiche delle istruzioni al riavvio dell'istanza mediante:

  • Scrittura di dati in un file denominato pg_stat_statements.stat

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

Quando pg_stat_statements.save è impostato su:

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

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

Memorizzazione del testo delle query: l'estensione memorizza 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 raccolta dei dati indesiderati. 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 pg_stat_statements.max limite ed è necessario tenere traccia delle nuove istruzioni, l'estensione:

  • Richiede un blocco esclusivo (:pg_stat_statements) LWLock 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 (5% inferiore).

  • Ricompila la tabella hash con le voci rimanenti.

Monitoraggio della deallocazione delle istruzioni — In PostgreSQL 14 e versioni successive, puoi 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 raccolta più frequente dei rifiuti del file su disco. pgss_query_texts.stat

Probabili cause di aumento delle attese

Le cause tipiche dell'aumento delle attese includono: LWLock:pg_stat_statements

  • Un aumento del numero di query uniche utilizzate dall'applicazione.

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

Azioni

Consigliamo azioni diverse a seconda delle cause dell'evento di attesa. Puoi identificare LWLock:pg_stat_statements gli eventi utilizzando Amazon RDS Performance Insights o interrogando la vista. pg_stat_activity

Modifica i seguenti pg_stat_statements parametri per controllare il comportamento di tracciamento e ridurre gli eventi di attesa delle dichiarazioni pg_stat_ LWLock.

Disabilita il parametro pg_stat_statements.track

Se l'evento di LWLock aspetta:pg_stat_statements ha un impatto negativo sulle prestazioni del database ed è necessaria una soluzione rapida prima di un'ulteriore analisi della vista per identificare la causa principale, il parametro può essere disabilitato impostandolo su. pg_stat_statements pg_stat_statements.track none Ciò disabiliterà la raccolta di statistiche sulle dichiarazioni.

Aumenta il parametro pg_stat_statements.max

Per ridurre la deallocazione e minimizzare la raccolta indesiderata del file su disco, aumenta il valore del parametro. pgss_query_texts.stat pg_stat_statements.max Il valore predefinito è 5,000.

Nota

Il pg_stat_statements.max parametro è statico. È necessario riavviare l'istanza DB per applicare eventuali modifiche a questo parametro.

Disabilita 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 da cui viene monitorato. pg_stat_statements

Il pg_stat_statements.track_utility parametro 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 di savepoint, che sono intrinsecamente uniche, può aumentare la deallocazione delle istruzioni. Per risolvere questo problema, è possibile disabilitare il pg_stat_statements.track_utility parametro in modo da impedire il tracciamento delle query sui savepoint. pg_stat_statements

Nota

Il pg_stat_statements.track_utility parametro è un parametro dinamico. È possibile modificarne il valore senza riavviare l'istanza del 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 savepoint vengono ora visualizzati come costanti.

  • La transazione globale IDs (GIDs) dei comandi di commit in due fasi viene ora visualizzata come costanti.

  • I nomi delle istruzioni DEALLOCATE vengono visualizzati come costanti.

  • I parametri CALL vengono ora visualizzati come costanti.