发布于 2026-09-10T10:59:48.289388Z · Shaun Thomas · pgEdge 博客

work_mem 按操作而非按查询生效,一条语句里的多个排序、哈希节点各占一份,哈希节点还要乘 hash_mem_multiplier,预估总量没有趁手工具。作者用 raw_parser() 解析、planner() 生成计划,再遍历计划树累加倍率乘上 work_mem 得到最坏情况,做成扩展 querymem 挂在 ExecutorStart 钩子上,可记日志或拒绝超限查询。在 pgbench 上,含两个哈希的连接估到 28 MB。
work_mem 按操作而非按查询生效,一条语句里的多个排序、哈希节点各占一份,哈希节点还要乘 hash_mem_multiplier,预估总量没有趁手工具。作者用 raw_parser() 解析、planner() 生成计划,再遍历计划树累加倍率乘上 work_mem 得到最坏情况,做成扩展 querymem 挂在 ExecutorStart 钩子上,可记日志或拒绝超限查询。在 pgbench 上,含两个哈希的连接估到 28 MB。
来源记录
- center.info_item · d29245b9e2c6c7fa · 2026-10-03T04:08:35.169032Z
- pgweb.info_item · d29245b9e2c6c7fa · 2026-10-03T04:08:55.967155Z