Tous les termes du glossaire

Journal des transactions (WAL)

Qu’est-ce que le journal des transactions (WAL) dans PostgreSQL ?

Le journal des transactions enregistre chaque modification avant qu’elle n’atteigne les fichiers de données, ce qui permet à PostgreSQL de récupérer après un plantage. Le WAL alimente aussi la réplication et la restauration à un instant donné.

Le principe central de la journalisation anticipée (write-ahead logging) est que les modifications des fichiers de données ne peuvent être écrites qu’après avoir été journalisées et que le journal a été vidé sur un stockage permanent. Après un plantage, PostgreSQL rejoue le journal depuis le dernier checkpoint pour ramener les fichiers de données dans un état cohérent.

Comme seul le journal séquentiel doit être vidé sur disque lors de la validation d’une transaction, et non chaque page de données modifiée, le WAL réduit aussi les écritures sur disque. Ce même flux d’enregistrements WAL est ce que la réplication en flux (streaming replication) envoie aux serveurs standby et ce que l’archivage continu conserve pour la restauration à un instant donné. Les positions dans le journal sont appelées numéros de séquence de journal (LSN).

Exemple

L’exemple affiche le paramètre wal_level configuré et la position WAL actuelle avant et après la création d’une table de 10 000 lignes. La seconde position est plus avancée, car la nouvelle table a été écrite dans le journal.

SHOW wal_level;
SELECT pg_current_wal_lsn();

CREATE TABLE wal_demo AS SELECT g FROM generate_series(1, 10000) AS g;

SELECT pg_current_wal_lsn();

Du SQL simple pour PostgreSQL 16 ou 17 standard, sans aucune extension. Exécutez-le dans une base de données vide que vous pouvez jeter ensuite.

Références

Documentation officielle de PostgreSQL (en anglais).

Termes associés