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 : PgTuneAutres 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