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 semplice buffer (SLRU) utilizzato meno di recente per un membro multixact.LWLock:MultiXactMemberSLRU
— Un processo è in attesa di accedere alla cache semplice usata meno di recente () per un membro multixact. SLRULWLock:MultiXactOffsetBuffer
— Un processo è in attesa di I/O su un semplice buffer () usato l'ultima volta () per un offset multixact. SLRULWLock:MultiXactOffsetSLRU
— Un processo è in attesa di accedere alla cache semplice usata meno di recente () per un offset multixact. SLRU
Versioni del motore supportate
Queste informazioni sugli eventi di attesa sono supportate per tutte le versioni di Aurora Postgre. SQL
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 SQL JDBC Postgre Driver ne è un esempio.
autosave
Per ulteriori informazioni, consulta pg JDBC nella documentazionedi SQL JDBC Postgre. Un altro esempio è il SQL ODBC driver Postgre e la sua opzione. protocol
Per ulteriori informazioni, consulta le opzioni di ODBC configurazione di psql nella documentazionedel driver SQL ODBC Postgre. Sottotransazioni da SQL EXCEPTION clausole PL/pg — Ogni
EXCEPTION
clausola che scrivi nelle funzioni o procedure PL/pg ne crea una internamente. SQLSAVEPOINT
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 dalle inserzioni. 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. Questo I/O proveniente dallo storage significa che le SQL query 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.
-
VACUUMFREEZEUtilizzatelo sulla tabella o sulla partizione di tabella interessata per risolvere immediatamente il problema. Per ulteriori informazioni, consulta VACUUM
. -
Utilizzate la clausola VACUUM (FREEZE, INDEX _ CLEANUPFALSE) per eseguire un vacuo rapido 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 analizzato tutte le tabelle in tutti i database, alla fine VACUUM rimuoverà i multixact e i loro valori multixact più vecchi verranno aggiornati. Per ulteriori informazioni, vedere Multixacts e Wraparound.
Se l'utilizzo VACUUM FREEZE sulla tabella o sulla partizione di tabella interessata risolve il problema dell'evento di attesa, consigliamo di utilizzare uno scheduler, ad esempio, per eseguire VACUUM invece di regolare l'pg_cron
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:
multixact_offsets_cache_size
fino a 128multixact_members_cache_size
fino a 256
È 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 proprie 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 (linguaggio di definizione dei dati) 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ò, verifica la presenza di 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.