Memoria RDS per PostgreSQL - Amazon Relational Database Service

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à.

Memoria RDS per PostgreSQL

La memoria RDS per PostgreSQL è divisa in condivisa e locale.

Memoria condivisa in RDS per PostgreSQL

RDS per PostgreSQL assegna memoria condivisa all'avvio dell'istanza. La memoria condivisa è divisa in più sottoaree. Le sezioni seguenti forniscono le descrizioni di quelle più importanti.

Buffer condivisi

Il pool buffer condiviso è un'area di memoria RDS per PostgreSQL che contiene tutte le pagine che sono o sono state utilizzate dalle connessioni delle applicazioni. Una pagina è la versione di memoria di un blocco disco. Il buffer pool condiviso memorizza nella cache i blocchi di dati letti dal disco. Il pool riduce la necessità di rileggere i dati dal disco, rendendo il database più efficiente.

Ogni tabella e indice vengono memorizzati come una matrice di pagine di dimensioni fisse. Ogni blocco contiene più tuple, che corrispondono alle righe. Una tupla può essere memorizzata in qualsiasi pagina.

Il buffer pool condiviso ha memoria finita. Se una nuova richiesta richiede una pagina che non è in memoria, e non esiste più memoria, RDS per PostgreSQL espelle una pagina utilizzata meno frequentemente per soddisfare la richiesta. La politica di sfratto è implementata da un algoritmo di sweep dell'orologio.

Il parametro shared_buffers determina la quantità di memoria che il server dedica alla memorizzazione nella cache dei dati. Il valore predefinito è impostato su {DBInstanceClassMemory/32768} byte, in base alla memoria disponibile per l'istanza DB.

Buffer Write ahead log (WAL)

Un Buffer write-ahead log (WAL) conserva i dati delle transazioni che RDS per PostgreSQL successivamente scrive sull'archiviazione persistente. Utilizzando il meccanismo WAL, RDS per PostgreSQL può effettuare le seguenti operazioni:

  • Recuperare i dati dopo un errore

  • Riduci il disco I/O evitando le scritture frequenti su disco

Quando un client modifica i dati, RDS per PostgreSQL scrive le modifiche nel buffer WAL. Quando il client emette un COMMIT, il processo di scrittura WAL scrive i dati delle transazioni nel file WAL.

Il wal_level parametro determina la quantità di informazioni scritte nel WAL, con valori possibili come minimalreplica, elogical.

Memoria locale in RDS per PostgreSQL

Ogni processo di back-end assegna memoria locale per l'elaborazione delle query.

Area di memoria di lavoro

L’area di memoria di lavoro contiene dati temporanei per query che eseguono ordinamenti e hash. Ad esempio, una query con clausola ORDER BY esegue un ordinamento. Le query utilizzano tabelle hash nei join e nelle aggregazioni hash.

Il work_mem parametro indica la quantità di memoria che deve essere utilizzata dalle operazioni di ordinamento interne e dalle tabelle hash prima della scrittura su file temporanei su disco, misurata in megabyte. Il valore predefinito è 4 MB. È possibile eseguire più sessioni contemporaneamente e ogni sessione può eseguire operazioni di manutenzione in parallelo. Per questo motivo, la memoria di lavoro totale utilizzata può essere costituita da multipli dell’impostazione work_mem.

Area memoria di lavoro di manutenzione

L’area di memoria di lavoro di manutenzione memorizza nella cache i dati per le operazioni di manutenzione. Queste operazioni includono l'aspirazione, la creazione di un indice e l'aggiunta di chiavi esterne.

Il maintenance_work_mem parametro specifica la quantità massima di memoria da utilizzare per le operazioni di manutenzione, misurata in megabyte. Il valore predefinito è 64 MB. Una sessione di database può eseguire solo un'operazione di manutenzione alla volta.

Area buffer temporanea

L’area buffer temporanea memorizza nella cache le tabelle temporanee per ciascuna sessione del database.

Ogni sessione assegna buffer temporanei secondo necessità fino al limite specificato. Quando la sessione scade, il server cancella i buffer.

Il temp_buffers parametro imposta il numero massimo di buffer temporanei utilizzati da ciascuna sessione, misurato in megabyte. Il valore predefinito è 8 MB. Prima del primo utilizzo di tabelle temporanee all'interno di una sessione, è possibile modificare il valore temp_buffers.