PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 27/02/2012 19:21:57

baradji
Membre

valeurs des variables de postgresql.conf et /etc/sysctl.conf

Bonjour, j'ai un nouveau serveur dédié postgresql-8.4 installe sur ubuntu.
voici les paramètres
# free
                   total         used              free     shared    buffers     cached
Mem:       6117392    4239636    1877756          0     112308    3796344
-/+ buffers/cache:     330984    5786408
Swap:      2000052         76    1999976
-----
# df -h /*
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda7             546G   42G  477G   8% /
/dev/sda1             183M   22M  152M  13% /boot
none                  3.0G  220K  3.0G   1% /dev
-------------
le répertoire data de la bd est actuellement a 42 Go.

Ma préoccupation est de donner les meilleurs valeurs aux variables shared_buffers et autres.

sur l’ancien serveur, voici les valeurs qui existent:
shared_buffers = 1024MB           
temp_buffers = 10MB         
#max_prepared_transactions = 5     
effective_cache_size = 3000MB
work_mem = 30MB                 
maintenance_work_mem = 16MB

et dans le fichier /etc/sysctl.conf, on
kernel.shmmax=4907034880
kernel.shmall=40971520
net.ipv6.conf.all.disable_ipv6 = 1

or sur le nouveau serveur, ces variables sont inexistant

Quel sera votre conseil pour parametrer postgresql.conf et /etc/sysctl.conf ?

Hors ligne

#2 27/02/2012 21:19:20

rjuju
Administrateur

Re : valeurs des variables de postgresql.conf et /etc/sysctl.conf

Bonjour.
Pour pouvoir répondre il faut que nous en sachions plus sur l'utilisation du serveur. Par exemple, le nombre d'utilisateurs connectés en même temps, quelle utilisation est faite de la base de donnée (beaucoup de lectures, beaucoup d'écriture) etc ...

Hors ligne

#3 27/02/2012 22:18:52

baradji
Membre

Re : valeurs des variables de postgresql.conf et /etc/sysctl.conf

salut,
environ 60 connexions simultanées.
bcp d’écritures a la seconde.
j'ai vu dans un la documentation postgresql(http://docs.postgresql.fr/8.4/runtime-config-resource.html), qu'il faut allouer 40% de la memoire a la variable shared_buffer.
est ce la memoire totale ou memoire free?
aussi quelle valeure donnees a shmmax et shmall ?

merci

Hors ligne

#4 27/02/2012 23:05:52

gleu
Administrateur

Re : valeurs des variables de postgresql.conf et /etc/sysctl.conf

est ce la memoire totale ou memoire free?

Sur un serveur dédié, c'est plutôt de l'ordre d'1/3 de la RAM. Sur un serveur non dédié, 1/3 de la RAM restante (ie, après avoir enlevé la mémoire prise par les autres programmes).

aussi quelle valeure donnees a shmmax et shmall ?

Il faut les configurer pour que PostgreSQL puisse allouer le shared_buffers et quelques petits trucs en plus.

Votre mémoire fait apparemment 6 Go. J'en mettrais bien 2 au niveau du shared_buffers. Du coup, vos shmmax et shmall sont déjà bien configurés.


Guillaume.

Hors ligne

#5 27/02/2012 23:06:36

rjuju
Administrateur

Re : valeurs des variables de postgresql.conf et /etc/sysctl.conf

S'agit-il également d'un serveur dédié postgresql ? Car si ce n'est pas le cas il faut penser à laisser de la place au reste.

40% peut-être une bonne valeur mais il est souvent préférable de commencer plus bas, 25% par exemple, et d'augmenter si besoin. Cela dépend aussi des requêtes effectuées en permanence. Si elle utilisent beaucoup de tri ou utilisent beaucoup de données, il convient d'augmenter le work_mem, ce qui diminue fortement la mémoire disponible pour le shared_buffer. La valeur utilisée par work_mem est allouée à chaque connexion, donc dans votre exemple 30Mo * 60 connexions = 1.8 Go utilisés.

shmma et shmall correspondent à la quantité totale de mémoire partagée que vous voulez pouvoir allouer. Si pour une erreur de configuration postgres il y a trop de mémoire demandée, cela posera soucis soit au niveau postgres a cause d'un shmmax trop faible soit au niveau système avec un OOM. Le plus simple je pense est de le mettre à la quantité de mémoire vive sur votre machine (6 Go je crois), et de faire en sorte que shared_buffers + (nb connexion * work_mem) + (maintenance_work_mem * autovacuum_max_workers) ne dépasse pas votre quantité de mémoire vive.

Je ne suis cependant pas le plus qualifié ici pour vous aider, je n'ai pas eu énormément de machines à configurer.

Hors ligne

#6 01/03/2012 15:54:23

saigamp
Membre

Re : valeurs des variables de postgresql.conf et /etc/sysctl.conf

Bonjour, je rebondis sur ce fil car je configure aussi les 2 fichiers postgresql.conf et /etc/sysctl.d/30-postgresql-shm.conf (je suis sous debian).

Je possède 4 Go de Ram. Mes paramètres de conf sont:
max_connections = 100
shared_buffers = 1024MB
#max_prepared_transactions = 0
#wal_buffers = -1
#autovacuum_max_workers = 3
#max_locks_per_transaction = 64

D'après la doc (http://www.postgresql.org/docs/9.1/stat … PARAMETERS), j'ai fixé les 2 paramètres shmmax et shmall à:
kernel.shmmax = 1137327240
kernel.shmall = 277668

Mon calcul est le suivant:
shmmax = ((1800 + 270 * 64) * 100) + ((1800 + 270 * 64) * 3) + ((770 + 270 * 64) * 0) + (8400 * 1 Go / 8192) + (8200 * 1/32 * 1 Go / 8192) + 770 Ko
shmall = ceil (1137327240 / 4096)

J'ai un doute sur le calcul de Shared disk buffers: 8400 * 1 Go / 8192
Si j'applique la définition de la doc ((block_size + 208) * shared_buffers) j'obtiens des octets au carré hmm C'est pourquoi je fait 1 Go / 8192: est-ce le bon calcul?

Merci de vos réponses

Hors ligne

#7 01/03/2012 16:38:00

gleu
Administrateur

Re : valeurs des variables de postgresql.conf et /etc/sysctl.conf

La formule "((block_size + 208) * shared_buffers)" suppose que shared_buffers soit en nombre de buffers, pas en octet. Le (block_size+208) permet justement de transformer ça en octets. Donc, les octets au carré, c'est logique si vous avez laissé shared_buffers en octets smile Le 1Go/8192 est le bon calcul pour avoir le nombre de buffers.

Mais bon, vous vous embêtez vraiment pour pas grand-chose. Vous voulez 1GB pour le shared_buffers ? pas de soucis, mettez 2 Go pour shmmax sera amplement suffisant. Et mettre moins, calculer au plus juste n'a aucun intérêt.


Guillaume.

Hors ligne

#8 01/03/2012 16:53:46

Marc Cousin
Membre

Re : valeurs des variables de postgresql.conf et /etc/sysctl.conf

À mon avis, ce qui n'est pas forcément clair dans les explications, c'est que les paramètres du noyau linux (shmmax, shmall) n'augmentent pas la consommation de ressources sur le système: ce ne sont que des limites administratives, pour éviter qu'un programme ou un utilisateur ne puisse allouer un segment de mémoire partagé géant sans aucun contrôle. La limite par défaut à 32Mo est par contre devenue ridiculement petite avec le temps smile

Mettre un shmmax à 2Go ne va pas augmenter la charge du système. Cela va seulement permettre aux programmes installés sur le système d'allouer des segments plus grands.


Marc.

Hors ligne

#9 01/03/2012 18:18:40

saigamp
Membre

Re : valeurs des variables de postgresql.conf et /etc/sysctl.conf

Ok, go pour shmmax = 2Go!
C'est un serveur dédié à PostgreSQL, donc il n'y a pas grand risque de toute façon.
Merci pour les éclaircissements

Hors ligne

Pied de page des forums