在 postgresql.conf 中设置 shared_buffers 好像没有生效

Tom*_*iss 12 postgresql performance configuration performance-tuning

我们使用 CentOS 6.6 版,PostgreSQL 8.4.20 版。(是的,这不是最前沿的。)

postgresql.conf,我们有:

shared_buffers = 4096MB
Run Code Online (Sandbox Code Playgroud)

内核 shm 值设置得很好且很高:

[root@green data]# sysctl -a | grep shm
kernel.shmmax = 15922077696
kernel.shmall = 3887226
kernel.shmmni = 4096
kernel.shm_rmid_forced = 0
Run Code Online (Sandbox Code Playgroud)

我们有足够的内存:

[root@green data]# free
             total       used       free     shared    buffers     cached
Mem:      31097812   30474972     622840    2873672    1961088   20565360
-/+ buffers/cache:    7948524   23149288
Swap:      1959920      93852    1866068
Run Code Online (Sandbox Code Playgroud)

然而,shared_buffersreported by的值pg_settings只有 512MB,而不是 4GB 中设置的postgresql.conf

postgres=# select name, setting, min_val, max_val, context from  
pg_settings where name='shared_buffers';
      name      | setting | min_val |  max_val   |  context   
----------------+---------+---------+------------+------------
 shared_buffers | 524288  | 16      | 1073741823 | postmaster
Run Code Online (Sandbox Code Playgroud)

是的,我们已经完全重新启动,并SHOW config_file确认我已经编辑了正确的postgresql.conf.

我非常感谢任何能够洞察这个谜团的人。

Dan*_*ité 15

的规范单位shared_buffers是 的页数8kB,因此以字节为单位分配的实际内存为:

524288* 8192=42949672964096*1024*1024按要求。

您还可以使用以下命令检查内存段的大小 ipcs -m


Erw*_*ter 6

什么@Daniel解释说,当你添加相应的列到你的查询,以便准确地变得相当明显:

SELECT name, setting, unit, min_val, max_val, context
FROM   pg_settings WHERE name = 'shared_buffers';
Run Code Online (Sandbox Code Playgroud)

要不就:

SELECT * FROM pg_settings WHERE name = 'shared_buffers';
Run Code Online (Sandbox Code Playgroud)

考虑您的“非流血边缘”(又名过时和不受支持)Postgres 版本的项目指南