我在 Centos 6 x64 上有一个小型数据库 PostgreSQL (v9.3)( RAM:8 GB)。

postgresql.conf

max_connections = 512
shared_buffers = 3000MB  
temp_buffers = 8MB          
work_mem = 2MB          
maintenance_work_mem = 128MB         
effective_cache_size = 3000MB

大约 150 个连接,PostgreSQL 需要超过 6 GB 的 RAM(当然,其他应用程序使用大约 200 MB 的 RAM),这里是我的信息:

Mem:  7062.945M total, 6892.410M used,  170.535M free, 6644.000k buffers
Swap:    0.000k total,    0.000k used,    0.000k free, 5378.922M cached

问题:

  1. 为什么PG需要大量RAM?

  2. 如何减少 PG 的缓存缓冲区?

有帮助吗?

解决方案

postgreSQL不使用大量的RAM,内核使用它用于磁盘缓存。

这正是你想要发生的事情。这里没有什么可以解决的。

“免费”RAM是浪费的RAM。数据库服务器的最佳方法是尽可能多的RAM用作磁盘缓存。

其他提示

事实上,与 shared_buffers = 3000MB, Postgres 占用“大量”RAM(相对于 8 GB 的系统而言) - 即使不是全部 RAM,就像您可能一直在想的那样。“为什么”很明显:因为你用你的设置指示它 shared_buffers. 。该设置很高(默认为 128MB),但对于专用数据库服务器来说,该设置似乎仍然合理。(超过总 RAM 的 40% 通常是过度杀伤力。)

Postgres 的用途 两个都 系统缓存 它自己的共享缓冲区。共享缓冲区是 投入的 到 Postgres 并且内存不与其他进程共享。它们用于短期缓冲数据,对于快速处理至关重要。系统缓存通常更智能、更快速,可以长期处理要保留在缓存中的内容以及在资源紧张时推出的内容。 @克雷格的回答您找到的网站 解释一下为什么系统缓存 似乎 吃掉你所有的内存。所有这些都是针对 Unix/Linux 的。Windows在某些方面的工作方式有所不同,我不熟悉细节。

“减少PG的缓存缓冲区” (你可能真的想这样做一段时间 “小型数据库”)降低设置 shared_buffers重新启动 Postgres:

该参数只能在服务器启动时设置。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top