Type: | integer |
Défaut: | 4096 (4MB) |
Min: | 64 (64kB) |
Max: | 2147483647 (2147483647kB) |
Unité: | KB |
Contexte: | user |
Redémarrer: | false |
Indique la quantité de mémoire maximale de base à utiliser pour l'exécution d'une requête (tel qu'un tri ou une table de hachage) avant d'écrire dans des fichiers temporaires sur disque. Si cette valeur est indiquée sans unité, elle est considérée etre en Ko. La valeur par défaut est de 4 Mo (4MB
). Pour une requête complexe, il peut y avoir plusieurs opérations de tri ou de hachage exécutées en parallèle ; chacune peut utiliser de la mémoire à hauteur de cette valeur avant de commencer à placer les données dans des fichiers temporaires. De plus, de nombreuses sessions peuvent exécuter de telles opérations simultanément. La mémoire totale utilisée peut, de ce fait, atteindre plusieurs fois la valeur de work_mem
; il est nécessaire de garder cela à l'esprit lors du choix de cette valeur. Les opérations de tri sont utilisées pour ORDER BY
, DISTINCT
et les jointures de fusion. Les tables de hachage sont utilisées dans les jointures de hachage, les agrégations et le traitement des sous-requêtes IN
fondés sur le hachage.
Les opérations basées sur le hachage sont généralement plus sensibles à la disponibilité de la mémoire que leur équivalent basé sur le tri. La mémoire disponible pour les tables de hachages est calculée en multipliant work_mem
par hash_mem_multiplier. Cela rend possible pour les opérations de hachage d'utiliser une quantité de mémoire qui dépasse la quantité de base proposée par work_mem
.
Recommandations [EN]
Sur StackOverflow
Sur pgsql-hackers
- Proposal: Adding compression of temporary files
- Re: Lowering the minimum value for maintenance_work_mem
- Re: Add mention of execution time memory for enable_partitionwise_* GUCs
- Re: Proposal: Adding compression of temporary files
- Re: Add the ability to limit the amount of memory that can be allocated to backends.