Les journaux WAL

Formation administration PostgreSQL
représentation des WAL (journaux binaires de PostgreSQL)

Les journaux WAL

Introduction

En réalité les informations stockées dans les WAL ne sont pas des directives SQL, mais des pages de mémoire de masse de longueur de 8 kio correspondant aux zones impactées dans les divers fichiers. En conséquence il est inutile d'essayer d'en interpréter le contenu car les instructions ayant provoqué la modification des pages n'y sont pas stokées.

En raison de son aptitude à restaurer la base de données en cas de crash, les systèmes de fichiers journalisés ne sont pas nécessaires et peuvent même nuire à la performance. Pour éviter cela sous Linux il est possible de configurer un système de fichier ext3 avec l'option data=writeback.

Avantages

Synchronisation des WAL

Le mode fsync = off est très déconseillé, mais il permet un gain significatif de performances. Il existe cependant quelques contextes pertinents tels que durant les restaurations ou encore dans le cas de bases de données en read only. Dans la plupart des cas on préférera utiliser synchronous_commit = OFF qui est quasiment aussi avantageux en performances et qui supporte également les arrêts brutaux et autres crashs.

La commande système pg_test_fsync permet de déterminer quelle est la méthode la plus performante sur notre système.

La plupart des disques y compris les SSD sont pourvus de cache. Ceci est vérifiable par la commande (sous Linux) hdparm -I device. Afin de garantir l'écriture des données en cas de crash il faudra le désactiver, ce qui peut se réaliser par la commande hdparm -W 0 device.

COMMIT synchrone/asynchrone

L'intérêt est de permettre une accélération significative de la performance, mais au détriment de la garantie d'écriture et donc avec risque de pertes de données en cas de crash.

COMMIT synchrone/asynchrone

Un standby name se définit par le paramètre application_name indiqué dans le fichier recovery.conf exigé en mode réplication.

Pour indiquer que l'on souhaite la réponse d'au moins 2 serveurs répliqués quelconques il faudra positionner le paramètre synchronous_standby_names = '2 (*)'.

Configuration des WAL

la plupart des valeurs seront à positionner dans le fichier postgresql.conf.

Configuration des WAL

À propos des fichiers WAL

L'utilisation de archive_command et archive_timeout permet de réaliser un système d'archivage répliqué.

Un fichier WAL est pré-alloué sur le disque afin que PostgreSQL ne soit pas confronté à des problèmes d’espace.

La commande archive_command permet l'utilisation des paramètres %p et %f qui se substituent respectivement au chemin complet du fichier et au seul nom du fichier. Il est ainsi possible de transférer chaque fichier WAL dans un espace dédié à leur archivage.

À propos des fichiers WAL

Les TimeLineID commencent à 1 au premier lancement du cluster puis s'incrémentent à chaque nouvelle restauration permettant ainsi de distinguer les différents niveaux d'archives.

À propos des fichiers WAL

Lors de l'évolution du système, des WAL deviennent inutiles. Afin d'éviter de gaspiller des ressources de traitement PostgreSQL renommera les fichiers de journaux devenu inutiles en leur donnant un nom qui sera utilisé dans le futur. C'est la raison pour laquelle il apparaîtra parfois des journaux situés au delà du journal courant, ce qui se vérifie à l'aide de la commande SELECT pg_walfile_name(pg_current_wal_lsn());.

À propos des checkpoints

Les WAL ne peuvent être supprimés sans altérer le fonctionnement du système car il contiennent éventuellement des informations nécessaires aux tables. C'est la raison pour laquelle il est indispensable de recourir à l'utilisation de CHECKPOINT qui rendra tous les enregistrements antérieurs inutiles.

La fréquence des checkpoints peut devenir trop importante si la base de données est fortement sollicitée et que le paramètre checkpoint_warning indique un nombre trop bas de secondes entre deux checkpoints automatiquement générés, ce qui conduira à la production de messages dans les logs. Pour éviter cela il faudra :

Fonctions dédiées aux fichiers WAL

Maintenance des fichiers WAL

Depuis la version 9.5 il est possible de réduire l'espace demandé par les WALs grâce à l'utilisation de le compression de type LZ. Ceci s'active par le paramètre wal_compression=on et apporte également l'avantage de réduire les entrées-sorties, mais au détriment de consommation CPU.

Pour obtenir de l'aide

Sur le site officiel de PostgreSQL :