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. Nelle seguenti sezioni sono descritte le 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 database.
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
-
Ridurre l'I/O del disco evitando 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 parametro wal_level determina la quantità di informazioni scritte sul WAL, con valori possibili quali minimal, replica e logical.
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 parametro work_mem indica la quantità di memoria da utilizzare per le operazioni di ordinamento interno e le tabelle hash prima di scrivere su file di disco temporanei. 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 parametro maintenance_work_mem specifica la quantità massima di memoria da utilizzare per le operazioni di manutenzione, espressa 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 parametro temp_buffers imposta il numero massimo di buffer temporanei utilizzati da ogni sessione, espressi 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.