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 18)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
启动值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行 | |
待重启 | 否 |
文档:work_mem
work_mem (PostgreSQL 17)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
启动值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行 | |
待重启 | 否 |
文档:work_mem
work_mem (PostgreSQL 16)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
启动值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行 | |
待重启 | 否 |
文档:work_mem
work_mem (PostgreSQL 15)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
启动值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行 | |
待重启 | 否 |
文档:work_mem
work_mem (PostgreSQL 14)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
启动值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行 | |
待重启 | 否 |
文档:work_mem
work_mem (PostgreSQL 13)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
启动值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行 | |
待重启 | 否 |
文档:work_mem
work_mem (PostgreSQL 12)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
启动值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行 | |
待重启 | 否 |
文档:work_mem
work_mem (PostgreSQL 11)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
启动值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行 | |
待重启 | 否 |
文档:work_mem
work_mem (PostgreSQL 10)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
启动值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行 | |
待重启 | 否 |
文档:work_mem
work_mem (PostgreSQL 9.6)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
启动值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行 | |
待重启 | 否 |
文档:work_mem
work_mem (PostgreSQL 9.5)
设置 | 4096 |
单位 | kB |
类别 | 资源使用/内存 |
简短描述 | 设置查询工作区使用的最大内存。 |
额外描述 | 在切换到临时磁盘文件之前,每个内部排序操作和哈希表可以使用这么多的内存。 |
上下文 | 用户 |
变量类型 | 整数 |
来源 | 默认 |
最小值 | 64 |
最大值 | 2147483647 |
枚举值 | |
启动值 | 4096 |
重置值 | 4096 |
源文件 | |
源代码行 | |
待重启 | 否 |
文档: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年的博客文章