Utilizzo di tabelle non registrate in Aurora PostgreSQL - 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à.

Utilizzo di tabelle non registrate in Aurora PostgreSQL

Amazon Aurora PostgreSQL supporta tabelle non registrate che sono resistenti agli 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 Write-Ahead Log (WAL) durante le operazioni di scrittura, con conseguente velocità di scrittura più elevate. Tuttavia, ciò comporta una riduzione della durabilità, in quanto le tabelle non registrate non sono a prova di crash 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 un arresto non corretto. Inoltre, i loro contenuti e indici non vengono replicati sui server di standby.

Al contrario, Aurora PostgreSQL gestisce le tabelle non registrate in modo diverso grazie alla sua architettura di archiviazione distribuita. Questo perché il sistema di storage di Aurora non si basa sul tradizionale 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. Ciò è dovuto all'architettura di storage distribuito di Aurora, che può introdurre un sovraccarico aggiuntivo rispetto allo storage locale utilizzato in PostgreSQL standard.

Quando utilizzi tabelle non registrate in Aurora PostgreSQL, considera quanto segue:

  • È possibile accedere alle tabelle non registrate solo dal nodo writer nel cluster Aurora DB.

  • I nodi Reader possono accedere alle tabelle non registrate solo quando vengono promossi allo stato di scrittore.

  • Quando si tenta di accedere a tabelle non registrate da un nodo di lettura, si verificherà 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, aggiungi 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 );

Conversione di tabelle non registrate in tabelle registrate

Quando è necessario riconvertire una tabella non registrata in una tabella registrata, è possibile utilizzare il seguente comando:

ALTER TABLE table_name SET LOGGED;

Questa operazione riscrive l'intera tabella e la blocca in modo esclusivo fino al completamento dell'operazione. Per le tabelle di grandi dimensioni, ciò può comportare tempi di inattività significativi.

Tabelle non registrate e replica logica

Le tabelle non registrate generalmente non sono incluse nella replica logica perché la replica logica si basa sul WAL per acquisire e trasferire le modifiche. Per impostazione predefinita, le modifiche alle tabelle non registrate non vengono registrate da WAL ed escluse 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 (off), le tabelle non registrate vengono escluse dalla replica logica.

  • Quando rds.logically_replicate_unlogged_tables è impostato su 1 (acceso), le tabelle non registrate vengono incluse nella replica logica.

Nota

In Aurora PostgreSQL, il rds.logically_replicate_unlogged_tables parametro è impostato per impostazione predefinita su 1 (attivo) nelle versioni 14 e precedenti e su 0 (disattivato) nelle versioni 15 e successive.