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