LWLock:bufferIO (IPC: bufferio) - 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:bufferIO (IPC: bufferio)

L'LWLock:BufferIOevento si verifica quando Aurora PostgreSQL o RDS for PostgreSQL sono in attesa che altri processi completino le loro operazioni mentre tentano contemporaneamente di accedere a una pagina. input/output (I/O Il suo scopo è quello di leggere la stessa pagina nel buffer condiviso.

Versioni di motori pertinenti

Queste informazioni relative all'evento di attesa sono rilevanti per tutte le versioni di Aurora PostgreSQL. Per Aurora PostgreSQL 12 e versioni precedenti questo evento di attesa è denominato lwlock:buffer_io mentre in Aurora PostgreSQL versione 13 è denominato lwlock:bufferio. In Aurora PostgreSQL versione 14, l'evento di attesa BufferIO è stato spostato da LWLock al tipo di evento di attesa IPC (IPC:BufferIO).

Context

Ogni buffer condiviso ha un blocco I/O associato all’evento di attesa LWLock:BufferIO, ogni volta che un blocco (o una pagina) deve essere recuperato all'esterno del buffer pool condiviso.

Questo blocco viene utilizzato per gestire più sessioni che richiedono tutte l'accesso allo stesso blocco. Questo blocco deve essere letto dall'esterno del buffer pool condiviso, definito dal parametro shared_buffers.

Non appena la pagina viene letta all'interno del buffer pool condiviso, il blocco LWLock:BufferIO viene rilasciato.

Nota

L'evento di attesa LWLock:BufferIO precede l’evento di attesa IO: DataFileRead. L’evento di attesa IO:DataFileRead si verifica mentre i dati vengono letti dallo storage.

Per ulteriori informazioni sui blocchi leggeri, consultaPanoramica dei blocchi.

Cause

Le cause comuni della comparsa dell'evento LWLock:BufferIO che appare nelle prime attese includono:

  • Più backend o connessioni che tentano di accedere alla stessa pagina in attesa di un'operazione di I/O

  • Il rapporto tra le dimensioni del buffer pool condiviso (definito dal parametro shared_buffers) e il numero di buffer necessari per il carico di lavoro corrente

  • La dimensione del buffer pool condiviso non è ben bilanciata con il numero di pagine sfrattate da altre operazioni

  • Indici grandi o gonfi che richiedono al motore di leggere più pagine del necessario nel buffer pool condiviso

  • Mancanza di indici che costringe il motore DB a leggere più pagine dalle tabelle del necessario

  • Picchi improvvisi per le connessioni al database che tentano di eseguire operazioni sulla stessa pagina

Azioni

Consigliamo azioni diverse a seconda delle cause dell'evento di attesa:

  • Osserva le CloudWatch metriche di Amazon per verificare la correlazione tra forti diminuzioni degli eventi BufferCacheHitRatio e di LWLock:BufferIO attesa. Questo effetto può significare che hai una piccola impostazione dei buffer condivisi. Potrebbe essere necessario aumentarlo o scalare la classe di istanza DB. È possibile dividere il carico di lavoro in più nodi di lettore.

  • Verifica se hai indici inutilizzati, quindi rimuovili.

  • Utilizzare tabelle partizionate (che hanno anche indici partizionati). Ciò aiuta a mantenere basso il riordino dell'indice e ne riduce l'impatto.

  • Evitare di indicizzare inutilmente le colonne.

  • Evita improvvisi picchi di connessione al database utilizzando un connection pool.

  • Limitare il numero massimo di connessioni al database come best practice.