work_mem
是一个配置参数,指定内部排序操作和哈希表可用的最大内存量,超过此内存量,操作将溢出到磁盘(并可能变得相当缓慢)。
work_mem
在PostgreSQL 8.0中添加,替换了sort_mem
。
默认值
work_mem
的默认值为
- PostgreSQL 9.4 及更高版本:
4MB
- PostgreSQL 8.0 ~ PostgreSQL 9.3:
1MB
更改work_mem
需要重新加载才能生效,并且对所有后端立即生效。
按 PostgreSQL 版本查看详细信息
work_mem (PostgreSQL 17)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行号 | |
挂起重启 | false |
文档:work_mem
work_mem (PostgreSQL 16)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行号 | |
挂起重启 | false |
文档:work_mem
work_mem (PostgreSQL 15)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行号 | |
挂起重启 | false |
文档:work_mem
work_mem (PostgreSQL 14)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行号 | |
挂起重启 | false |
文档:work_mem
work_mem (PostgreSQL 13)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行号 | |
挂起重启 | false |
文档:work_mem
work_mem (PostgreSQL 12)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行号 | |
挂起重启 | false |
文档:work_mem
work_mem (PostgreSQL 11)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行号 | |
挂起重启 | false |
文档:work_mem
work_mem (PostgreSQL 10)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行号 | |
挂起重启 | false |
文档:work_mem
work_mem (PostgreSQL 9.6)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行号 | |
挂起重启 | false |
文档:work_mem
work_mem (PostgreSQL 9.5)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行号 | |
挂起重启 | false |
文档:work_mem
work_mem (PostgreSQL 9.4)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行号 |
文档:work_mem
work_mem (PostgreSQL 9.3)
设置 | 1024 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 1024 |
重置值 | 1024 |
源文件 | |
源代码行号 |
文档:work_mem
work_mem (PostgreSQL 9.2)
设置 | 1024 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 1024 |
重置值 | 1024 |
源文件 | |
源代码行号 |
文档:work_mem
work_mem (PostgreSQL 9.1)
设置 | 1024 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 1024 |
重置值 | 1024 |
源文件 | |
源代码行号 |
文档:work_mem
work_mem (PostgreSQL 9.0)
设置 | 1024 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 1024 |
重置值 | 1024 |
源文件 | |
源代码行号 |
文档:work_mem
work_mem (PostgreSQL 8.4)
设置 | 1024 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
引导值 | 1024 |
重置值 | 1024 |
源文件 | |
源代码行号 |
文档:work_mem
work_mem (PostgreSQL 8.3)
设置 | |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
文档:work_mem
work_mem (PostgreSQL 8.2)
设置 | |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 每个内部排序操作和哈希表在切换到临时磁盘文件之前可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
文档:work_mem
更改历史记录
- PostgreSQL 9.4
- 默认值从
1MB
更改为4MB
(提交848ae330)
- 默认值从
- PostgreSQL 8.0
参考文献
- PostgreSQL 文档: work_mem
有用链接
- 关于设置“work_mem”的所有知识都是错误的。 - Christope Pettus 于 2023 年 3 月撰写的博客文章
- 让我们进一步讨论一下在 #PostgreSQL 中设置 work_mem 的问题 - 2021 年的 Twitter 线程
- 在 Postgres 中配置 work_mem - David Conlin / pgMustard 于 2020 年 2 月撰写的博客文章
- 理解 postgresql.conf : work_mem - depesz 于 2011 年撰写的博客文章