Vous n'êtes pas identifié(e).
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
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 ...
Julien.
https://rjuju.github.io/
Hors ligne
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
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
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.
Julien.
https://rjuju.github.io/
Hors ligne
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é C'est pourquoi je fait 1 Go / 8192: est-ce le bon calcul?
Merci de vos réponses
Hors ligne
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 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
À 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
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
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