Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
Pages : 1