postgres 的内存分配是如何工作的?

how does memory allocation for postgres work?

  1. shared_buffers - 在常规的 PostgreSQL 安装中,假设我将 25% 的内存分配给 shared_buffers,这意味着它留下 75% 的剩余空间,例如 OS、页面缓存和 work_mems 等。我的理解是否正确? 如果是这样,适用于 Postgres 的 AWS Aurora 将 75% 的内存用于 shared_buffers,那么它会只留下 25% 用于其他事情吗?
  2. 是否为 work_mem 指定的内存完全分配给所有会话,无论它们是否执行任何排序或哈希操作?

你的第一个陈述一定是正确的:

如果 75% 的 RAM 用于共享缓冲区,那么 只有 25% 可用于进程私有内存等其他用途.

work_mem 上限 执行计划中的一个操作(“节点”)已准备好用于创建哈希或位图或排序。这并不意味着每个操作都分配那么多内存,它只是一个限制。

在不保证绝对可靠性的情况下,以下是我个人的经验法则:

shared_buffers + max_connections * work_mem 应小于或等于可用 RAM。那么你不太可能运行内存不足。