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à.
Utilizzo delle tabelle non registrate in Aurora PostgreSQL
Amazon Aurora PostgreSQL supporta tabelle non registrate che proteggono dagli arresti anomali e mantengono l’integrità dei dati anche dopo errori o failover delle istanze di scrittura. In PostgreSQL standard, le tabelle non registrate ignorano il log WAL (Write-Ahead Log) durante le operazioni di scrittura, aumentando di conseguenza la velocità di scrittura. Tuttavia, questo si traduce in una ridotta durabilità, perché le tabelle non registrate non sono protette dagli arresti anomali e possono perdere dati dopo un guasto del sistema o un arresto non corretto. Queste tabelle non registrate vengono troncate automaticamente dopo un arresto anomalo o non corretto. Inoltre, i relativi contenuti e indici non vengono replicati sui server di standby.
Aurora PostgreSQL, invece, gestisce diversamente le tabelle non registrate grazie alla sua architettura di archiviazione distribuita. Questo è dovuto al sistema di archiviazione Aurora, che non si basa sul tradizionale log WAL PostgreSQL per la durabilità. Tuttavia, i vantaggi in termini di prestazioni tipicamente associati alle tabelle non registrate in PostgreSQL standard potrebbero non essere così significativi in Aurora. Questo è dovuto all’architettura di archiviazione distribuita di Aurora, che può introdurre un sovraccarico aggiuntivo rispetto all’archiviazione locale utilizzata in PostgreSQL standard.
Durante l’utilizzo delle tabelle non registrate in Aurora PostgreSQL, considerare quando segue:
-
È possibile accedere alle tabelle non registrate solo dal nodo di scrittura nel cluster Aurora database.
-
I nodi di lettura possono accedere alle tabelle non registrate solo quando vengono promossi allo stato di scrittura.
-
Se si prova ad accedere alle tabelle non registrate da un nodo di lettura, si verifica il seguente errore:
cannot access temporary or unlogged relations during recovery.
Creazione di tabelle non registrate
Per creare una tabella non registrata in Aurora PostgreSQL, aggiungere la parola chiave UNLOGGED nell’istruzione CREATE TABLE:
CREATE UNLOGGED TABLE staging_sales_data ( transaction_id bigint, customer_id bigint, product_id bigint, transaction_date date, amount NUMERIC );
Gestione delle tabelle non registrate durante la migrazione
Quando si prepara la migrazione dei dati ad Aurora PostgreSQL, è importante identificare e gestire in modo appropriato le tabelle non registrate. Le tabelle non registrate sono escluse sia dal log WAL che dal flusso di replica, il che significa che non verranno replicate su una replica di lettura Aurora.
Convertire le tabelle non registrate in tabelle registrate o eliminarle se non vengono utilizzate prima di creare una replica di lettura Aurora.
Per verificare la presenza di tabelle non registrate in ogni database all’interno dell’istanza, utilizzare il comando seguente:
SELECT oid, relfilenode, relname, relpersistence, relkind FROM pg_class WHERE relpersistence ='u';
Per riconvertire una tabella non registrata in tabella registrata, utilizzare il seguente comando:
ALTER TABLEtable_nameSET LOGGED;
Questa operazione riscrive l’intera tabella e la blocca in modo esclusivo fino al completamento. Per le tabelle di grandi dimensioni, questo può tradursi in tempi di inattività significativi.
Conversione di tabelle non registrate in tabelle registrate
Quando è necessario riconvertire una tabella non registrata in tabella registrata, è possibile utilizzare il seguente comando:
ALTER TABLEtable_nameSET LOGGED;
Questa operazione riscrive l’intera tabella e la blocca in modo esclusivo fino al completamento dell’operazione. Per le tabelle di grandi dimensioni, questo può tradursi in tempi di inattività significativi.
Tabelle non registrate e replica logica
Le tabelle non registrate in genere non sono incluse nella replica logica perché questa si basa sul log WAL per acquisire e trasferire le modifiche. Per impostazione predefinita, le modifiche alle tabelle non registrate sono escluse sia dal log WAL che dal flusso di replica, il che le rende inadatte ai casi d’uso in cui è richiesta la replica logica. Tuttavia, Aurora PostgreSQL fornisce un parametro chiamato rds.logically_replicate_unlogged_tables che consente di controllare questo comportamento:
-
Quando
rds.logically_replicate_unlogged_tablesè impostato su 0 (disattivato), le tabelle non registrate vengono escluse dalla replica logica. -
Quando
rds.logically_replicate_unlogged_tablesè impostato su 1 (attivato), le tabelle non registrate vengono incluse nella replica logica.
Nota
In Aurora PostgreSQL, il parametro predefinito per rds.logically_replicate_unlogged_tables è impostato su 1 (attivato) nella versione 14 e precedenti e su 0 (disattivato) nella versione 15 e successive.