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 collection
operazione sul file su disco e riscrive ilpgss_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.
Argomenti
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.