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 04/09/2019 14:42:08

duple
Membre

paramètrage work_mem

Bonjour,
J'aimerai savoir comment affiner le paramètrage de work_mem sur postgresql.
Exemple si on prend un evironnement linux , avec pg9.6 et ram = 10G, disons avec une configuration de shared_buffers = 3G (environ 25% de la RAM) et max_connection = 50,
est ce que cela veut il dire que sur les 10G de la RAM 3 G sera allouée spécialement pour les caches pg et donc on aurait 7G restant pour work_mem, maintenance_work_mem et les caches pour fsync ? Supposons que le nombre maximum de jointure dans une requête est de 4 + possibilité de trie sur les requêtes, et qu'à un instant T on aurait en moyenne 30 requêtes en parallèle, et en plus on va paramétrer maintenance_work_mem = 1G; est ce que de par ce fait la valeur max à attribuer à work_mem serait donc dans cette situation de : work_mem = 50 MB sachant que 50MB * 4 (jointure) * 30 (connexions en mm temps)  = 6000MB = 5.86GB retirés dans la RAM ?

Hors ligne

#2 04/09/2019 21:47:57

gleu
Administrateur

Re : paramètrage work_mem

Si par "caches pour fsync", vous voulez en fait parler du cache du système d'exploitation, oui, c'est ça. Et les autres applications exécutées. Si maintenance_work_mem vaut 1 Go, potentiellement, vous pouvez utiliser trois fois ça rien que pour l'autovacuum. Donc 3 Go en moins, donc reste uniquement 10-3-3=4Go. On estime généralement le work_mem suivant le max_connections, ce qui ferait 4 Go / 50, soit 81 Mo. On le fait ainsi parce que toutes les sessions n'utilisent pas forcément le work_mem et que certaines sessions l'utiliseront plusieurs fois. Si on prend votre exemple, cela voudrait que 30 sessions à la fois utiliseraient tout work_mem pour chaque jointure (qui devront être des Hash Join, pas des Nested Loop ou des Merge Join) et un work_mem complet pour un tri. La probabilité que ceci arrive est pratiquement nulle.


Guillaume.

Hors ligne

#3 09/09/2019 14:26:25

duple
Membre

Re : paramètrage work_mem

Ok, donc la config à adopter serait de faire work_mem ~ (RAM - Shared_buffers - maintenance_ work_mem) / max_connections ?
Et si on configure work_mem a une valeur trop élevée çà va entrainer quoi, une erreur "out of memory" ?

Hors ligne

#4 09/09/2019 23:28:38

gleu
Administrateur

Re : paramètrage work_mem

maintenance_work_mem peut être utilisé plusieurs fois. 5 semble un maximum raisonnable mais évidemment, c'est théoriquement possible que ce soit plus.

Plutôt une utilisation du swap, jusqu'à finir par rendre le serveur instable.


Guillaume.

Hors ligne

#5 10/09/2019 15:29:09

duple
Membre

Re : paramètrage work_mem

Ok merci pour les réponses

Hors ligne

Pied de page des forums