Chapitre 25. Write-Ahead Logging (WAL)

Table des mati�res
25.1. Avantages des WAL
25.2. Avantages futurs
25.3. Configuration de WAL
25.4. Internes

Write-Ahead Logging (WAL) est une approche standard pour l'�criture d'un journal de transactions. Sa description d�taill�e peut �tre trouv�e dans la plupart (si ce n'est tous) des livres sur le traitement transactionnel. Bri�vement, le concept central des WAL est que les changements des fichiers de donn�es (o� r�sident les tables et les index) doivent �tre effectu�s uniquement apr�s que ces changements aient �t� �crits dans un journal, c'est-�-dire quand l'enregistrement du journal a �t� �crit vers le stockage permanent. Si nous suivons cette proc�dure, nous n'avons pas besoin d'�crire les pages de donn�es vers le disque � chaque validation de transaction car nous savons que dans l'�ventualit� d'une d�faillance, nous serons capables de r�cup�rer la base de donn�es en utilisant le journal : chaque changement qui n'a pas �t� appliqu� aux pages de donn�es sera d'abord refait depuis les enregistrements du journal (ceci est une r�cup�ration roll-forward, aussi connue sous le nom de REDO) et ensuite les changements effectu�s par des transactions non valid�es seront supprim�s des pages de donn�es (r�cup�ration roll-backward, UNDO).

25.1. Avantages des WAL

Le premier avantage �vident en utilisant les WAL est la r�duction significative du nombre d'�critures sur le disque puisque uniquement le journal des transactions a besoin d'�tre �crit sur le disque au moment o� la transaction est valid�e ; dans un environnement multi-utilisateurs, la validation de nombreuses transactions peut �tre accomplie avec un seul fsync() du journal. De plus, ce dernier est �crit s�quentiellement et donc, le co�t de synchronisation du journal est largement moindre que le co�t d'�criture des pages de donn�es.

Le second avantage est la coh�rence des pages de donn�es. La v�rit� est qu'avant WAL, PostgreSQL n'�tait pas capable de garantir la coh�rence en cas de d�faillance (crash). Avant WAL, une d�faillance quelconque durant l'�criture pouvait �tre le r�sultat :

  1. de lignes d'un index pointant vers des lignes inexistantes d'une table ;

  2. de lignes perdues d'un index dans des op�rations de s�paration ;

  3. de tables ou de contenu de pages d'index totalement corrompues � cause d'une �criture partielle des pages de donn�es

Les probl�mes avec les index (les probl�mes 1 et 2) auraient p� �tre corrig�s avec des appels suppl�mentaires � fsync() mais il n'est pas �vident de traiter le dernier cas sans WAL ; WAL sauve le contenu entier de la page de donn�es dans le journal si cela est requis pour assurer la coh�rence de la page et permettre la r�cup�ration apr�s d�faillance.