

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\$1stat\$1statements
<a name="apg-rpg-lwlockpgstat"></a>

L'evento di LWLock aspetta:pg\$1stat\$1statements 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 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.

**Topics**
+ [

## Versioni del motore supportate
](#apg-rpg-lwlockpgstat.supported)
+ [

## Contesto
](#apg-rpg-lwlockpgstat.context)
+ [

## Probabili cause di aumento delle attese
](#apg-rpg-lwlockpgstat.causes)
+ [

## Azioni
](#apg-rpg-lwlockpgstat.actions)

## Versioni del motore supportate
<a name="apg-rpg-lwlockpgstat.supported"></a>

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

## Contesto
<a name="apg-rpg-lwlockpgstat.context"></a>

**Comprendere l’estensione pg\$1stat\$1statements**: l’estensione pg\$1stat\$1statements 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\$1stat\$1statements.

**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\$1stat\$1statements.stat
+ Utilizzo del parametro pg\$1statements.save per controllare il comportamento di persistenza

Quando pg\$1statements.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:
+ Richiede un blocco esclusivo (:pg\$1stat\$1statements) sulla tabella hash. LWLock
+ 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\$1stat\$1statements\$1info. 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
<a name="apg-rpg-lwlockpgstat.causes"></a>

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
<a name="apg-rpg-lwlockpgstat.actions"></a>

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`.

Regola i seguenti `pg_stat_statements` parametri per controllare il comportamento di tracciamento e ridurre gli eventi di attesa delle istruzioni pg\$1stat\$1. LWLock

**Topics**
+ [

### Disabilitare il parametro pg\$1stat\$1statements.track
](#apg-rpg-lwlockpgstat.actions.disabletrack)
+ [

### Aumentare il parametro pg\$1stat\$1statements.max
](#apg-rpg-lwlockpgstat.actions.increasemax)
+ [

### Disabilitare il parametro pg\$1stat\$1statements.track\$1utility
](#apg-rpg-lwlockpgstat.actions.disableutility)

### Disabilitare il parametro pg\$1stat\$1statements.track
<a name="apg-rpg-lwlockpgstat.actions.disabletrack"></a>

Se l'evento di LWLock aspetta:pg\$1stat\$1statements 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 può essere disabilitato impostandolo su. `pg_stat_statements.track` `none` In questo modo verrà disabilitata la raccolta delle statistiche sulle istruzioni.

### Aumentare il parametro pg\$1stat\$1statements.max
<a name="apg-rpg-lwlockpgstat.actions.increasemax"></a>

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\$1stat\$1statements.track\$1utility
<a name="apg-rpg-lwlockpgstat.actions.disableutility"></a>

È possibile analizzare la vista pg\$1stat\$1statements 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. Il valore del parametro è `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.

**Example Esempio di query univoche sui punti di salvataggio in pg\$1stat\$1statements**  <a name="savepoint-queries"></a>

```
                     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.
+ 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.