Postgresql

在 postgresql.conf 中設置 shared_buffers 好像沒有生效

  • December 28, 2018

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

postgresql.conf中,我們有:

shared_buffers = 4096MB

核心 shm 值設置得很好而且很高:

[root@green data]# sysctl -a | grep shm
kernel.shmmax = 15922077696
kernel.shmall = 3887226
kernel.shmmni = 4096
kernel.shm_rmid_forced = 0

我們有足夠的記憶體:

[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

然而,shared_buffers報告的值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

是的,我們已經完全重新啟動,並SHOW config_file確認我已經編輯了正確的postgresql.conf.

我非常感謝任何能夠深入了解這個謎團的人。

的規範單位shared_buffers是 的頁面8kB,因此以字節為單位分配的實際記憶體是:

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

您還可以檢查記憶體段的大小ipcs -m

當您將相應的列添加到查詢中時,@Daniel 如此準確地解釋的內容變得相當明顯:

SELECT name, setting, **unit**, min_val, max_val, context
FROM   pg_settings WHERE name = 'shared_buffers';

要不就:

SELECT * FROM pg_settings WHERE name = 'shared_buffers';

考慮您的“非前沿”(又名過時且不受支持的)Postgres 版本的項目指南。

引用自:https://dba.stackexchange.com/questions/103756