Utilisation de tables non journalisées dans Aurora PostgreSQL - Amazon Aurora

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation de tables non journalisées dans Aurora PostgreSQL

Amazon Aurora PostgreSQL prend en charge les tables non journalisées qui sont sécurisées et préservent l’intégrité des données même en cas de défaillance ou de basculement d’une instance d’enregistreur. Dans PostgreSQL standard, les tables non journalisées contournent le journal WAL (Write Ahead Log) pendant les opérations d’écriture, ce qui se traduit par des vitesses d’écriture plus rapides. Cependant, cela se fait au détriment de la durabilité, car les tables non journalisées ne sont pas sécurisées et peuvent perdre des données en cas de panne du système ou d’arrêt incorrect. Ces tables non journalisées sont automatiquement tronquées en cas de panne ou d’arrêt incorrect. Leur contenu et leurs index ne sont pas non plus répliqués sur les serveurs de secours.

En revanche, Aurora PostgreSQL gère différemment les tables non journalisées en raison de son architecture de stockage distribuée. Cela est dû au fait que le système de stockage d’Aurora ne repose pas sur le journal WAL PostgreSQL traditionnel pour sa durabilité. Cependant, les avantages généralement associés aux tables non journalisées dans PostgreSQL standard en termes de performances ne sont peut-être pas aussi significatifs dans Aurora. Cela est dû à l’architecture de stockage distribué d’Aurora, qui peut entraîner une surcharge supplémentaire par rapport au stockage local utilisé dans PostgreSQL standard.

Lors de l’utilisation de tables non journalisées dans Aurora PostgreSQL, tenez compte des éléments suivants :

  • Vous ne pouvez accéder aux tables non journalisées qu’à partir du nœud d’enregistreur du cluster de bases de données Aurora.

  • Les nœuds de lecteur ne peuvent accéder aux tables non journalisées que lorsqu’ils sont promus au statut d’enregistreur.

  • Lorsque vous essayez d’accéder à des tables non journalisées à partir d’un nœud de lecteur, l’erreur suivante s’affiche :

    cannot access temporary or unlogged relations during recovery.

Création de tables non journalisées

Pour créer une table non journalisée dans Aurora PostgreSQL, ajoutez le mot clé UNLOGGED dans l’instruction CREATE TABLE :

CREATE UNLOGGED TABLE staging_sales_data ( transaction_id bigint, customer_id bigint, product_id bigint, transaction_date date, amount NUMERIC );

Gestion des tables non journalisées pendant la migration

Lorsque vous préparez la migration de données vers Aurora PostgreSQL, il est important d’identifier et de gérer les tables qui ne sont pas journalisées de manière appropriée. Les tables non journalisées ne sont pas journalisées par WAL et sont exclues du flux de réplication. Elles ne sont donc pas répliquées sur un réplica en lecture Aurora.

Convertissez les tables non journalisées en tables journalisées ou supprimez-les si elles ne sont pas utilisées avant de créer un réplica en lecture Aurora.

Pour vérifier la présence de tables non journalisées dans chaque base de données de l’instance, utilisez la commande suivante :

SELECT oid, relfilenode, relname, relpersistence, relkind FROM pg_class WHERE relpersistence ='u';

Pour reconvertir une table non journalisée en table journalisée, utilisez la commande suivante :

ALTER TABLE table_name SET LOGGED;

Cette opération réécrit l’intégralité de la table et y applique un verrou exclusif jusqu’à ce qu’elle soit terminée. Pour les grandes tables, cela peut entraîner des durées d’indisponibilité importantes.

Conversion de tables non journalisées en tables journalisées

Lorsque vous devez reconvertir une table non journalisée en table journalisée, vous pouvez utiliser la commande suivante :

ALTER TABLE table_name SET LOGGED;

Cette opération réécrit l’intégralité de la table et y applique un verrou exclusif jusqu’à ce que l’opération soit terminée. Pour les grandes tables, cela peut entraîner des durées d’indisponibilité importantes.

Tables non journalisées et réplication logique

Les tables non journalisées ne sont généralement pas incluses dans la réplication logique, car la réplication logique repose sur le journal WAL pour capturer et transférer les modifications. Par défaut, les modifications apportées aux tables non journalisées ne sont pas journalisées dans le journal WAL et sont exclues du flux de réplication, ce qui les rend inadaptées aux cas d’utilisation nécessitant une réplication logique. Cependant, Aurora PostgreSQL fournit un paramètre appelé rds.logically_replicate_unlogged_tables qui vous permet de contrôler ce comportement :

  • Lorsque rds.logically_replicate_unlogged_tables est défini sur 0 (désactivé), les tables non journalisées sont exclues de la réplication logique.

  • Lorsque rds.logically_replicate_unlogged_tables est défini sur 1 (activé), les tables non journalisées sont incluses dans la réplication logique.

Note

Dans Aurora PostgreSQL, le paramètre rds.logically_replicate_unlogged_tables est défini par défaut sur 1 (activé) dans les versions 14 et antérieures, et sur 0 (désactivé) dans les versions 15 et ultérieures.