Vous n'êtes pas identifié(e).

#1 11/10/2010 11:37:27

chris
Membre

shared_buffers : comment être sûr qu'on a mis la bonne valeur

Bonjour.
Suite à un changement d'infrastructure où initialement on avait un serveur dédié à une unique instance de postgres qui hébergeait une centaine de bases (je sais c'est beaucoup), je me retrouve avec une instance de postgres par base hébergée par un unique serveur. Du coup je ne peux plus utiliser la méthode qui consiste à allouer (par défaut) 1/4 de la RAM. Je dois donc allouer à chaque instance de postgres (une centaine) un certaine quantité de RAM pour le shared_buffer. Je pars avec un défaut de 256 Mo. Existe t-il une méthode qui me permette de savoir si ,pour une instance donnée, mon shared_buffer est bien taillé ? En effet mon serveur physique dispose de 16 Go que je dois mutualiser entre la centaine de zone postgres qu'il héberge.Après de nombreuses recherches sur le web je me sers actuellement de la requête suivante :

select blks_hit*1.0 / ( blks_hit + blks_read ) * 100 as percent from pg_stat_database where datname='MABASE'.
Cela me retourne un % qui si j'ai bien compris doit être le plus proche de 100 %.

J'utilise aussi cela :

SELECT count(*) * 100 / ( select count(*) from pg_buffercache) AS "% utilise du cache" FROM pg_buffercache WHERE relfilenode IS NOT NULL;


Est ce correct ? Existe-t-il d'autres méthodes ? Petite précision je suis en 8.2.15

Hors ligne

#2 11/10/2010 11:53:31

gleu
Administrateur

Re : shared_buffers : comment être sûr qu'on a mis la bonne valeur

Le mieux est certainement la première requête. La seconde est aussi intéressante mais elle peut poser problème : pour faire le calcul, elle doit verrouiller le cache... donc des problèmes d'accès rapide au cache peuvent se poser si la requête est exécutée fréquemment. Autrement dit, ne pas mettre la seconde requête dans un script munin ou Nagios, ça pourrait diminuer l'interactivité des applications.


Guillaume.

Hors ligne

#3 11/10/2010 12:15:19

chris
Membre

Re : shared_buffers : comment être sûr qu'on a mis la bonne valeur

Merci Guillaume pour cette réponse rapide. Petite précision : Imaginons qu'avec un shared_buffer à 256 Mo  le résultat de la 1ere requête me donne environ 99 % . Si j'augmente de manière significative le shared_buffer, est ce que le pourcentage diminuera aussi de manière significative ?
Quels seraient les symptômes si mon shared_buffer était trop petit ?
Je suis en train de potasser votre article paru dans Linux Mag 107 : vraiment très bien. J'apprends beaucoup de choses. Je vais aussi bientôt attaquer le linux Mag consacré à la version 9.

Christian

Hors ligne

#4 11/10/2010 12:35:11

gleu
Administrateur

Re : shared_buffers : comment être sûr qu'on a mis la bonne valeur

Si j'augmente de manière significative le shared_buffer, est ce que le pourcentage diminuera aussi de manière significative ?

Non, vu que la requête vous renvoit le pourcentage de lecture dans le cache. Celui ne pourrait qu'augmenter si vous augmentez la taille du cache. Par contre, ce que vous renvoie la seconde requête (le pourcentage de remplissage du cache) pourrait diminuer si votre base devient plus petite que le cache.

Quels seraient les symptômes si mon shared_buffer était trop petit ?

Un pourcentage pour la première requête qui diminue, des lectures qui vont se faire surtout en dehors du cache de PostgreSQL, donc potentiellement plus fréquemment sur disque. Donc à priori un système potentiellement plus lent. (Beaucoup de « potentiellement » car il faut aussi prendre en compte la taille du cache de Linux qui va éviter un certain nombre de lectures sur disque).

Quant aux commentaires pour les articles, merci smile Je suis preneur de toute commentaire dessus. Ça ne peut qu'améliorer les prochains.


Guillaume.

Hors ligne

#5 11/10/2010 13:43:04

chris
Membre

Re : shared_buffers : comment être sûr qu'on a mis la bonne valeur

Merci pour ces précisions.
Je ne manquerai pas de critiquer  - de manière constructive wink - vos articles.
A bientôt.

Christian

Hors ligne

Pied de page des forums