Cette semaine j’ai été confronté à un incident sur une instance postgres. La partition xlogs était pleine :

Cette instance est répliquée sur un autre serveur et archive ses journaux de transaction sur un troisième serveur. Ce dernier était plein, Postgres est intelligent et a conservé ses journaux de transaction en attendant de pouvoir les archiver… Jusqu’à ce que la partition des journaux se retrouve pleine entraînant l’arrêt de Postgres.

Le nettoyage sur le serveur d’archivage n’était pas suffisant, il fallait libérer de la place sur la partition. La solution qui vient en tête est d’agrandir la partition. Je ne souhaitais pas agrandir la partition. J’ai donc fait un truc tout simple : Déplacer un fichier journal et faire un lien symbolique vers celui-ci. Postgres est reparti et j’ai lancé un « CHECKPOINT » immédiatement ce qui a libéré de la place. Ensuite il faut penser à supprimer le fichier car Postgres a juste supprimé le lien.
C’est plus rapide à mettre en place que d’agrandir la partition.

En fouillant sur google je suis tombé sur ce site :
Solving pg_xlog out of disk space problem on Postgres

L’auteur nous donne une astuce toute simple : Créer un fichier plein de vide. Si un jour la partition est pleine il suffit de le supprimer pour faire repartir l’instance :

 dd if=/dev/zero of=DO_NOT_MOVE_THIS_FILE bs=1MB count=100

Bilan : Il faut bien penser à superviser l’archivage de Postgres!

Share

2 thoughts on “Partition xlogs pleine

  1. Au lieu de « dd if=/dev/zero of=DO_NOT_MOVE_THIS_FILE bs=1MB count=100 » on peut utiliser fallocate qui est plus rapide…

    fallocate -l 1G DO_NOT_MOVE_THIS_FILE

    Répondre
  2. En fait, il n’y a pas besoin de pré-allouer une fichier. Le système ext fait une pré-allocation qui ne sert que pour l’utilisateur root. Et bien sûr, on peut libérer cette pré-allocation au profit des autres utilisateurs (notamment postgres).
    Avec la commande tune2fs -m xxx on spécifie le pourcentage de blocks réservés à root. Par défaut, cette valeur est placée à 5%.
    Pour un volume de 20Go, cela fait dont 1Go.
    Juste avant de relancer postgres, tune2fs -m 1 /dev/sdX passe la réservation à 1% sur le volume /dev/sdX permettant à postgres de traiter ces journaux. /dev/sdX étant la partition contenant les xlogs.

    Ne pas oublier de remettre à 5% lorsque tout est rentré dans l’ordre.

    Répondre

Ecrire un commentaire

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url=""> 

requis