Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
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
Ok merci pour les réponses
Hors ligne
Pages : 1