Skip to Content

Optimiser PostGreSQL avec PgTune

Niveau Intermédiaire
Logiciels utilisés PgTune pour openSUSE
Plateforme Linux

Lorsque la volumétrie de PostGreSQL augmente et que nos habitudes de travail nous obligent à toujours demander davantage à la base de données (requêtes gourmandes, etc), il est urgent de bien optimiser le fichier de configuration postgresql.conf.

Pour cela, il existe un excellent outil : PgTune. Ce script est capable de vous indiquer les meilleurs paramètres pour PostGreSQL en fonction de votre serveur. Voici un exemple avec un serveur sous openSUSE 12.3 :

Installation de PgTune via software.opensuse.org/package/pgtune

Dans un terminal, taper la commande : 

pgtune -i /data/pgsql/data/postgresql.conf -o postgresql2.conf

Concrêtement cette commande, va lire votre fichier postgresql.conf (commande -i pour input) et en fonction de votre matériel, vous proposer la nouvelle configuration dans un nouveau fichier (-o pour output) que nous appelerons postgresql2.conf.

Renommez votre postgresql.conf en postgresql.old et postgresql2.conf en postgresql.conf et redémarrer le service

rcpostgresql restart

Si le service ne redémarre pas, c'est que les paramètres pgtune ne sont pas bons.

Pensez à vérifier que le même paramètre n'est pas présent à deux endroits dans le fichier. En effet, Pgtune ajoute à la fin les différents paramètres et leurs variables en fin de fichiers mais ceux-ci sont déjà présents dans le corps.

Autre problème, dans la documentation PostGreSQL, il est indiqué d'allouer 25% de la mémoire du serveur pour le paramètre shared_buffers. C'est ce que fait PgTune, hors le kernel Linux peut ne pas pouvoir allouer autant. 

Dans mon cas, pour 64Go de RAM, Pgtune m'indiquait 11Go mais mon kernel ne pouvait allouer plus de 8Go, j'ai donc renseigné 7Go pour le paramètres shared_buffers.

Pour connaitre la limite actuelle de votre Kernel (en octets), tapez :

cat /proc/sys/kernel/shmmax

Pour en connaitre la valeur maximale : 

ipcs -m -l

C'est la ligne total de mémoire partagée maximal (kilooctet) qu'il faut noter.

Si vous avez la même valeur, ne touchez à rien et renseignez shared_buffer légèrement en dessous. Si vous avez un écart important, éditez le fichier /etc/sysctl.conf 

Ajouter une ligne ou vous y indiquerez en octets la limite maximale théorique du kernel : 

kernel.shmmax =

Puis :

sysctl -p 

pour appliquer le paramètre

Retour sur le fichier postgresql.conf et corriger la limite shared_buffers légèrement en dessous de la nouvelle valeur max du kernel. Votre service PostGreSQL devrait démarrer.

Bonne optimisation :)

Site officiel : PgTune
Autres Liens : Tuning Your PostgreSQL Server
Autres Liens : Paramètre Kernel Shmmax

Commentaires

SHMMAX

Bonjour,

Avec PostgreSQL >= 9.3, le réglage de SHMMAX n'est plus nécessaire, le système d'allocation de mémoire ayant changé justement pour cette raison.

D'autre part, attention de ne pas faire une confiance aveugle aux outils de ce type. Il s'agit plus d'une indication de configuration que de réglages absolus.

Dans tous les cas, la configuration d'un serveur de bases de données ne dépend pas que du matériel sous-jacent, il dépend aussi fortement du type d'utilisation qui en est fait. On ne configure pas de la même façon un serveur orienté OLTP et un serveur orienté Datawarehouse par exemple.

Mais pgtune est bien pratique pour des réglages rapides d'un serveur fraichement installé (plutot que les défauts peu pertinents), sur lesquels on peut ensuite jouer pour améliorer la configuration.

Vincent

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.