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
を編集したことを確認しています。
このミステリーについて洞察を提供してくれる人に感謝します。
shared_buffers
の正規単位は8kB
のページであるため、バイト単位で割り当てられる実際のメモリは次のとおりです。
524288
* 8192
= 4294967296
または4096*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';
プロジェクトガイドライン あなたの "non-bleeding-Edge"(旧式でサポートされていない)Postgresバージョンを検討してください。
同じ問題が発生し、次のクエリを実行したとき:
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