Lua*_*ynh 1 postgresql configuration enterprisedb
我在 Centos 6 x64(RAM:8 GB)上有一个小型数据库 PostgreSQL (v9.3)。
postgresql.conf
max_connections = 512
shared_buffers = 3000MB
temp_buffers = 8MB
work_mem = 2MB
maintenance_work_mem = 128MB
effective_cache_size = 3000MB
Run Code Online (Sandbox Code Playgroud)
大约 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
Run Code Online (Sandbox Code Playgroud)
为什么 PG 需要大量 RAM?
如何减少 PG 的缓存缓冲区?
Cra*_*ger 10
PostgreSQL 没有使用大量 RAM,内核将其用于磁盘缓存。
这正是你想要发生的。这里没有什么可以解决的。
“免费”RAM 是浪费的 RAM。对数据库服务器而言,最好的做法是将尽可能多的 RAM 用作磁盘缓存。
实际上,shared_buffers = 3000MB
Postgres确实占用了“大量”RAM(相对于 8 GB 的系统而言)——即使不是全部 RAM,就像您可能一直在想的那样。“为什么”很明显:因为您用 的设置来指示它shared_buffers
。该设置很高(默认为 128MB),但对于专用数据库服务器来说,该设置似乎仍然合理。(超过总 RAM 的 40% 通常是过度杀伤力。)
Postgres 使用系统缓存和它自己的共享缓冲区。共享缓冲区专用于 Postgres,内存不与其他进程共享。它们用于短期缓冲数据,对于快速处理至关重要。系统缓存通常更智能、更快速,可以长期处理要保留在缓存中的内容以及在资源紧张时推出的内容。@Craig 的回答和您找到的网站解释了为什么系统缓存似乎耗尽了您所有的 RAM。所有这些都是针对 Unix/Linux 的。Windows在某些方面的工作方式有所不同,我不熟悉细节。
要“减少 PG 的缓存缓冲区”(您确实可能希望对“小型数据库”执行此操作),请降低Postgres 的设置shared_buffers
并重新启动:
该参数只能在服务器启动时设置。
归档时间: |
|
查看次数: |
6236 次 |
最近记录: |