Je veux m'assurer que Postgresql peut tirer parti de toute la mémoire disponible pour la mise en cache sur un serveur de BD dédié. Comment puis-je m'assurer que les paramètres de mémoire partagée du noyau sont corrects ? Quelqu'un connaît-il le calcul pour s'assurer que shmax etc. ne limite pas Postgresql ?
Réponse
Trop de publicités?Voici un petit extrait qui permet au serveur d'utiliser jusqu'à la moitié de la RAM physique pour la mémoire partagée :
#!/bin/bash
page_size=`getconf PAGE_SIZE`
phys_pages=`getconf _PHYS_PAGES`
shmall=`expr $phys_pages / 2`
shmmax=`expr $shmall \* $page_size`
echo \# Maximum shared segment size in bytes
echo kernel.shmmax = $shmmax
echo \# Maximum number of shared memory segments in pages
echo kernel.shmall = $shmall
Mets la sortie de ça dans /etc/sysctl.conf et exécute :
sysctl -p
Alors vous êtes prêt.
PostgreSQL utilise le système d'exploitation pour compléter toutes ses lectures et écritures, donc vous n'avez pas vraiment envie de consacrer la moitié de la RAM - celle-ci a beaucoup de marge pour un serveur de base de données dédié. Des tests variant la quantité de RAM dédiée au serveur trouvent normalement un débit maximal quelque part entre 15% et 40% de la RAM totale ; plus et vous vous retrouvez avec trop de pages en double tampon. Et la limite supérieure utile se situe autour de 8 Go sur les gros systèmes, point final, en raison de problèmes de contention de la mise en cache non encore résolus dans le code du serveur. Pour en savoir plus sur le réglage des serveurs, consultez le site Wiki PostgreSQL .