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

#1 23/04/2012 18:19:32

saigamp
Membre

work_mem pgtune

Bonjour,

je configure une base de données de type Web en utilisant pgtune. Pour un serveur avec 4Go de RAM, pgtune me donne:

maintenance_work_mem = 256MB
work_mem = 13MB
shared_buffers = 1GB
max_connections = 300

work_mem * max_connections = 3900MB
alors work_mem * max_connections + maintenance_work_mem + shared_buffers >>> 4GB

Même si work_mem n'est qu'un maximum de ressource utilisable par un utilisateur, n'y a-t-il pas un risque d'explosion de la RAM et donc de la base de données?
Merci pour vos éclaircissements!

Dernière modification par saigamp (25/04/2012 08:41:05)

Hors ligne

#2 23/04/2012 20:21:44

gleu
Administrateur

Re : work_mem pgtune

Si, le risque est présent. Maintenant, que 300 personnes demandent tous 13 Mo pour un tri, c'est peu probable. Personnellement, je ne proposerais pas 300 pour le max_connections. C'est une proposition de pgtune, ce max_connections ?


Guillaume.

Hors ligne

#3 24/04/2012 08:12:27

saigamp
Membre

Re : work_mem pgtune

En fait work_mem=13MB et max_connections=300, c'est pour une base OLTP.
Pour une base Web, pgtune donne work_mem=20MB et max_connections=200.
work_mem * max_connections = 4000MB : c'est encore pire!!!
Si je cromprend bien, il vaut mieux baisser un des deux paramètres?

Hors ligne

#4 24/04/2012 10:22:01

saigamp
Membre

Re : work_mem pgtune

Ou alors le risque est que la mémoire swap, ce qui n'est finalement pas si méchant que ça.

Hors ligne

#5 24/04/2012 21:55:07

gleu
Administrateur

Re : work_mem pgtune

Le swap pas méchant ? certainement le meilleur moyen de faire crasher un serveur très rapidement.

Pour en revenir à pgtune, quand je lui demande d'estimer la config pour un charge de type Web (pgtune -i /le/chemin/vers/postgresql.conf -T Web), j'obtiens ceci avec mon portable ayant 4Go de mémoire :

default_statistics_target = 100
maintenance_work_mem = 224MB
checkpoint_completion_target = 0.7
effective_cache_size = 2816MB
work_mem = 18MB
wal_buffers = 4MB
checkpoint_segments = 8
shared_buffers = 896MB
max_connections = 200

Soit 200*4MB, autrement 800MB. Tout à fait normal. Pour une charge OLTP, il m'indique :

default_statistics_target = 100
maintenance_work_mem = 224MB
checkpoint_completion_target = 0.9
effective_cache_size = 2816MB
work_mem = 12MB
wal_buffers = 8MB
checkpoint_segments = 16
shared_buffers = 896MB
max_connections = 300

Soit 300*12MB, autrement dit 3,6 Go. Ça fait beaucoup, ce qui est certainement dû au fait que c'est du OLTP où on ne s'attend pas à ce que tous les utilisateurs exécutent en même temps de grosse requêtes, mais où on s'attend en même temps à ce que quelques utilisateurs lancent de grosses requêtes qui bénéficieront de ce surplus de mémoire. Bref, personnellement, j'aurais tendance à diviser par deux le work_mem proposé, mais ce n'est que mon avis smile


Guillaume.

Hors ligne

#6 25/04/2012 08:39:56

saigamp
Membre

Re : work_mem pgtune

gleu a écrit :

Soit 200*4MB, autrement 800MB.

200*18 plutôt = 3,6 GB aussi.
Mon serveur fait 4Go de RAM mais j'ai passé en paramètre à pgtune -M 4294967296, d'où la petite différence.
Je vais suivre le conseil de diviser par 2 work_mem, d'autant que le site rencontre des pics de fréquentation à la "clôture des inscriptions".

Hors ligne

Pied de page des forums