LWLock:MultiXact - 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:MultiXact

Gli eventi LWLock:MultiXactMemberBufferLWLock: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 quindi UPDATE.

    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 pgJDBC nella 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.

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.

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. Per ridurre al minimo gli eventi LWLock: MultiXact wait, è necessario eseguire VACUUM tutte le volte che è necessario. A tale scopo, assicurati che VACUUM nel cluster Aurora PostgreSQL DB sia configurato in modo ottimale.

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= 128

  • multixact_member_buffers= 256

Per Aurora PostgreSQL 16 e versioni precedenti:
  • multixact_offsets_cache_size= 128

  • multixact_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.