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:MultiXact
Gli eventi LWLock:MultiXactMemberBuffer
LWLock:MultiXactOffsetBuffer
,LWLock:MultiXactMemberSLRU
, e LWLock:MultiXactOffsetSLRU
wait indicano che una sessione è in attesa di recuperare un elenco di transazioni che modifica la stessa riga in una determinata tabella.
LWLock:MultiXactMemberBuffer
: un processo è in attesa di I/O su un buffer semplice utilizzato meno di recente (SLRU) per un membro multixact.LWLock:MultiXactMemberSLRU
: un processo è in attesa di accedere alla cache semplice utilizzata meno di recente (SLRU) per un membro multixact.LWLock:MultiXactOffsetBuffer
: un processo è in attesa di I/O su un buffer semplice utilizzato meno di recente (SLRU) per un offset multixact.LWLock:MultiXactOffsetSLRU
: un processo è in attesa di accedere alla cache semplice utilizzata meno di recente (SLRU) per un offset multixact.
Versioni del motore supportate
Queste informazioni relative all'evento di attesa sono supportate per tutte el versioni di Aurora PostgreSQL.
Context
Un multixact è una struttura di dati che memorizza un elenco di transazioni IDs (XIDs) che modificano la stessa riga della tabella. Quando una singola transazione fa riferimento a una riga in una tabella, l'ID della transazione viene memorizzato nella riga di intestazione della tabella. Quando più transazioni fanno riferimento alla stessa riga in una tabella, l'elenco delle transazioni IDs viene memorizzato nella struttura di dati multixact. Gli eventi di attesa multixact indicano che una sessione sta recuperando dalla struttura dei dati l'elenco delle transazioni che fanno riferimento a una determinata riga di una tabella.
Probabili cause di aumento delle attese
Le tre cause più comuni dell'uso di multixact sono le seguenti:
Sottotransazioni da punti di salvataggio espliciti: la creazione esplicita di un punto di salvataggio nelle transazioni genera nuove transazioni per la stessa riga. Ad esempio, utilizzando
SELECT FOR UPDATE
,SAVEPOINT
e quindiUPDATE
.Alcuni driver, object relational mapper (ORMs) e layer di astrazione dispongono di opzioni di configurazione per includere automaticamente tutte le operazioni con punti di salvataggio. Questo comportamento può generare molti eventi di attesa multixact in alcuni carichi di lavoro. L'opzione
autosave
del driver PostgreSQL JDBC ne è un esempio. Per ulteriori informazioni, consulta pgJDBCnella documentazione di PostgreSQL JDBC. Un altro esempio è il driver PostgreSQL ODBC e l'opzione protocol
. Per ulteriori informazioni, consulta psqlODBC Configuration Options(Opzioni di configurazione di psqlODBC) nella documentazione del driver PostgreSQL ODBC. Sottotransazioni dalle clausole PL/pgSQL EXCEPTION — Ogni clausola che scrivi nelle funzioni o procedure PL/pgSQL ne crea una internamente.
EXCEPTION
SAVEPOINT
Chiavi esterne. Più transazioni acquisiscono un blocco di condivisione nel record padre.
Quando una determinata riga è inclusa in un'operazione di transazione multipla, l'elaborazione della riga richiede il recupero della transazione dagli elenchi. IDs multixact
Se le ricerche non riescono a ottenere il multixact dalla cache di memoria, la struttura dei dati deve essere letta dal livello di archiviazione di Aurora. Questa operazione I/O dall'archiviazione significa che le query SQL possono richiedere più tempo. Gli errori nella cache di memoria possono iniziare a verificarsi con l'utilizzo intensivo, a causa del numero elevato di transazioni multiple. Tutti questi fattori contribuiscono ad un aumento di questo evento di attesa.
Azioni
Consigliamo azioni diverse a seconda delle cause dell'evento di attesa. Alcune di queste azioni possono aiutare a ridurre immediatamente gli eventi di attesa. Tuttavia, altre potrebbero richiedere indagini e correzioni per aumentare il carico di lavoro.
Argomenti
Esegui il congelamento sottovuoto sui tavoli con questo evento di attesa
Se questo evento di attesa si verifica improvvisamente e influisce sull'ambiente di produzione, puoi utilizzare uno dei seguenti metodi temporanei per ridurne il numero.
-
Utilizzate VACUUM FREEZE sulla tabella o sulla partizione di tabella interessata per risolvere immediatamente il problema. Per ulteriori informazioni, vedere VACUUM.
-
Utilizzate la clausola VACUUM (FREEZE, INDEX_CLEANUP FALSE) per eseguire un'aspirazione rapida saltando gli indici. Per ulteriori informazioni, vedere Aspirare una tabella il più rapidamente possibile.
Aumenta la frequenza di aspirazione automatica sui tavoli con questo evento di attesa
Dopo aver scansionato tutte le tabelle in tutti i database, VACUUM alla fine rimuoverà i multixact e i loro valori multixact più vecchi verranno aggiornati. Per ulteriori informazioni, vedere Multixacts e Wraparound.
Se l'utilizzo di VACUUM FREEZE sulla tabella o sulla partizione di tabella interessata risolve il problema dell'evento di attesa, consigliamo di utilizzare uno scheduler, ad esempiopg_cron
, per eseguire VACUUM invece di regolare l'autovacuum a livello di istanza.
Affinché l'autovacuum avvenga più frequentemente, puoi ridurre il valore del parametro di archiviazione nella tabella interessata. autovacuum_multixact_freeze_max_age
Per ulteriori informazioni, vedere autovacuum_multixact_freeze_max_age.
Aumentare i parametri di memoria
È possibile ottimizzare l'utilizzo della memoria per le cache multixact regolando i seguenti parametri. Queste impostazioni controllano la quantità di memoria riservata a queste cache, il che può aiutare a ridurre gli eventi di attesa multixact nel carico di lavoro. Ti consigliamo di iniziare con i seguenti valori:
- Per Aurora PostgreSQL 17 e versioni successive:
-
multixact_offset_buffers
= 128multixact_member_buffers
= 256
- Per Aurora PostgreSQL 16 e versioni precedenti:
-
multixact_offsets_cache_size
= 128multixact_members_cache_size
= 256
Nota
In Aurora PostgreSQL 17, i nomi dei parametri venivano modificati da e multixact_offset_buffers
da multixact_offsets_cache_size
a per allinearli alla community PostgreSQL 17. multixact_members_cache_size
multixact_member_buffers
È possibile impostare questi parametri a livello di cluster in modo che tutte le istanze del cluster rimangano coerenti. Ti consigliamo di testare e modificare i valori per adattarli al meglio ai requisiti specifici del carico di lavoro e alla classe di istanza. È necessario riavviare l'istanza di writer per rendere effettive le modifiche ai parametri.
I parametri sono espressi in termini di voci di cache multixact. Ogni voce della cache utilizza memoria8 KB
. Per calcolare la memoria totale riservata, moltiplica il valore di ogni parametro per8 KB
. Ad esempio, se imposti un parametro su 128, la memoria riservata totale sarebbe128 * 8 KB = 1 MB
.
Riduci le transazioni di lunga durata
Una transazione di lunga durata fa sì che il vuoto conservi le informazioni fino al completamento della transazione o fino alla chiusura della transazione di sola lettura. Ti consigliamo di monitorare e gestire in modo proattivo le transazioni di lunga durata. Per ulteriori informazioni, consulta Il database ha una connessione di transazione inattiva da molto tempo. Prova a modificare l'applicazione per evitare o ridurre al minimo l'uso di transazioni di lunga durata.
Azioni a lungo termine
Esamina il tuo carico di lavoro per scoprire la causa dello spillover multixact. È necessario risolvere il problema per scalare il carico di lavoro e ridurre l'attesa.
È necessario analizzare il DDL (Data Definition Language) utilizzato per creare le tabelle. Assicurati che le strutture e gli indici delle tabelle siano ben progettati.
Se le tabelle interessate hanno chiavi esterne, stabilite se sono necessarie o se esiste un altro modo per applicare l'integrità referenziale.
Quando una tabella ha indici inutilizzati di grandi dimensioni, autovacuum può non adattarsi al carico di lavoro e potrebbe impedirne l'esecuzione. Per evitare ciò, controlla gli indici non utilizzati e rimuovili completamente. Per ulteriori informazioni, consulta Gestire l'autovacuum con indici di grandi dimensioni.
Riduci l'uso dei savepoint nelle tue transazioni.