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 (I/O) quando tentano contemporaneamente di accedere a una pagina. input/output 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).
Contesto
Ogni buffer condiviso ha un I/O blocco associato all'evento LWLock:BufferIO wait, ogni volta che un blocco (o una pagina) deve essere recuperato all'esterno del pool di buffer 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, anch'essa in attesa di un'operazione 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
BufferCacheHitRatioe diLWLock:BufferIOattesa. 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.