Mohamed KEITA
Note #23 min read

Le Write-Ahead Log : la pierre angulaire de la durabilité

La durabilité est l’une des promesses fondamentales des systèmes de base de données. Lorsqu’une application valide une transaction, elle s’attend à ce que les données survivent à une panne, un crash ou une perte d’alimentation. Assurer cette garantie est complexe : la mémoire est volatile, les disques réordonnent les écritures, et le système d’exploitation met tout en cache.

Pour rendre le comportement du hardware compatible avec les attentes des applications, les moteurs de bases de données s’appuient sur un mécanisme central : le Write-Ahead Log (WAL).

Le WAL est bien plus qu’un fichier de log. C’est un contrat entre les différentes couches du moteur : aucune modification ne doit être appliquée aux fichiers de données tant qu’elle n’a pas été écrite de manière sûre dans un journal append-only.
Cette règle simple structure toute l’architecture de la durabilité.

Pourquoi le WAL existe

Si un moteur écrivait directement les modifications dans ses structures internes (B-Trees, LSM, pages, segments), un crash survenant au mauvais moment pourrait corrompre tout l’état de la base.

Le WAL impose une discipline d’écriture :


Modifications → écrites dans le WAL → synchronisées → appliquées ensuite aux fichiers

Grâce à ses écritures séquentielles, le WAL fournit une trace fiable et récupérable des intentions du système. Même si un crash survient plus tard, l’historique reste intact.

Comment le WAL garantit la durabilité

Deux propriétés essentielles rendent la durabilité possible :

Écritures séquentielles prévisibles

Les disques gèrent bien mieux les écritures append-only. Le moteur en profite pour s’assurer que les entrées WAL atteignent le disque avant d’annoncer un commit.

Le WAL devient la source de vérité après un crash

Les fichiers de données peuvent être dans un état incomplet.
Le WAL, lui, est cohérent.

Une vue simplifiée :


Démarrage
│
├─ Lecture du WAL depuis le dernier checkpoint
│
├─ REDO des opérations validées
│
└─ UNDO des opérations incomplètes

C’est cette logique redo/undo qui permet au moteur de retrouver un état valide.

WAL replay et récupération après crash

Pour limiter le volume à rejouer, les moteurs créent périodiquement des checkpoints, représentant un instantané cohérent.


WAL : |- anciens logs -|- checkpoint -|- logs actifs -|

Sur un LSM engine, le WAL reconstruit les memtables.
Sur un moteur B-Tree, il répare les pages non flushées et annule les transactions incomplètes.

Quel que soit le style d’architecture, le WAL joue le rôle de fil conducteur permettant de retrouver un état cohérent.

Forces et limites structurelles

Forces

  • Garantit une durabilité stricte
  • Protège les structures internes des écritures partielles
  • Fournit une histoire linéaire et récupérable
  • Permet d’optimiser les écritures sur les fichiers de données

Limites

  • Génère un volume important sur des workloads intensifs
  • Nécessite des mécanismes de checkpoint efficaces
  • Peut devenir un goulot d’étranglement dans certains scénarios de forte écriture
  • Requiert un paramétrage précis des politiques fsync

Conclusion

Le Write-Ahead Log n’est pas une fonctionnalité secondaire : c’est l’élément qui permet aux bases de données de tenir leurs promesses de durabilité et de cohérence malgré les pannes. En imposant le principe « journaliser d'abord, écrire ensuite », le WAL structure le chemin d’écriture, la récupération après crash et la fiabilité globale du moteur.

Comprendre son comportement est indispensable pour analyser un moteur, prédire ses performances ou diagnostiquer ses points faibles.

Références recommandées

  1. Jim Gray & Andreas Reuter — Transaction Processing: Concepts and Techniques
  2. Documentation PostgreSQL — Write-Ahead Logging
  3. Garcia-Molina et al. — Database Systems: The Complete Book
  4. RocksDB Engineering Notes — WAL & Recovery
  5. Stonebraker — The Design of the POSTGRES Storage System
  6. Haerder & Reuter — “Principles of Transaction-Oriented Database Recovery”