【发布时间】:2009-07-28 18:56:13
【问题描述】:
Postgres 中的 work_mem 选项如何工作?这是http://www.postgresql.org/docs/8.4/static/runtime-config-resource.html的描述:
指定内部使用的内存量 在切换到之前排序操作和哈希表 临时磁盘文件。该值默认为 1 兆字节 (1MB)。请注意,对于一个复杂的查询,几个排序或 哈希操作可能并行运行;每一个 将被允许使用与此值一样多的内存 在开始将数据放入临时文件之前指定 文件。此外,可能正在进行几个正在运行的会话 此类操作同时进行。所以使用的总内存 可能是 work_mem 值的许多倍;它是 有必要在选择时牢记这一事实 价值。排序操作用于 ORDER BY、DISTINCT、 并合并连接。哈希表用于哈希连接, 基于散列的聚合和基于散列的 IN 处理 子查询。我在这里可能完全错了,但是..“切换到临时磁盘文件”与操作系统中的“虚拟内存”本质上不是一样的吗?一旦 RAM 消失,操作系统不会创建一个交换文件吗?将其设置为 100TB 并让操作系统自己解决不是更好吗?在我可能弄乱我的系统之前,我想检查一下是否有人真的尝试过这种方法。
【问题讨论】: