web-dev-qa-db-ja.com

postgresql.confでshared_buffersを設定しても効果がないようです

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であり、postgresql.confで設定されている4GBではありません。

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を編集したことを確認しています。

このミステリーについて洞察を提供してくれる人に感謝します。

8
Tom Swiss

shared_buffersの正規単位は8kBのページであるため、バイト単位で割り当てられる実際のメモリは次のとおりです。

524288 * 8192 = 4294967296または4096*1024*1024リクエストに応じて。

ipcs -mでメモリのセグメントのサイズを確認することもできます

10
Daniel Vérité

@ 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';

プロジェクトガイドライン あなたの "non-bleeding-Edge"(旧式でサポートされていない)Postgresバージョンを検討してください。

5

同じ問題が発生し、次のクエリを実行したとき:

select * from pg_settings 

Postgresql.auto.confを指すsourcefileを取得したので、shared_buffers値のみがファイルに設定されて再起動されたため、ファイルを削除しました

select *  from pg_settings where name='shared_buffers';

-[ RECORD 1 ]---+-------------------------------------------------------------
name            | shared_buffers
sourcefile      | /u02/pgsql/data/postgresql.conf
0
Postgres Help