Nous sommes sur CentOS version 6.6, PostgreSQL version 8.4.20. (Oui, cela ne saigne pas Edge.)
Dans postgresql.conf
, on a:
shared_buffers = 4096MB
les valeurs shm du noyau sont définies Nice et hautes:
[root@green data]# sysctl -a | grep shm
kernel.shmmax = 15922077696
kernel.shmall = 3887226
kernel.shmmni = 4096
kernel.shm_rmid_forced = 0
Nous avons beaucoup de mémoire:
[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
Pourtant, la valeur de shared_buffers
rapporté par pg_settings
ne fait que 512 Mo, pas les 4 Go définis dans 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
Oui, nous avons effectué un redémarrage complet et SHOW config_file
confirme que j'ai édité le bon postgresql.conf
.
Mes très grands remerciements à tous ceux qui peuvent donner un aperçu de ce mystère.
L'unité canonique pour shared_buffers
correspond aux pages de 8kB
, donc la mémoire réelle allouée en octets est:
524288
* 8192
= 4294967296
ou 4096*1024*1024
comme demandé.
Vous pouvez également vérifier la taille du segment de mémoire avec ipcs -m
Ce qui @ Daniel a expliqué devient si précis avec précision lorsque vous ajoutez la colonne respective à votre requête:
SELECT name, setting, unit, min_val, max_val, context
FROM pg_settings WHERE name = 'shared_buffers';
Ou juste:
SELECT * FROM pg_settings WHERE name = 'shared_buffers';
Considérez les directives du projet pour votre version Postgres "non-bleeding-Edge" (a.k.a. obsolète et non prise en charge).
a obtenu le même problème et quand j'ai exécuté la requête suivante:
select * from pg_settings
J'ai eu un fichier source pointant vers postgresql.auto.conf, j'ai donc supprimé le fichier car seule la valeur shared_buffers a été définie dans le fichier et redémarrée
select * from pg_settings where name='shared_buffers';
-[ RECORD 1 ]---+-------------------------------------------------------------
name | shared_buffers
sourcefile | /u02/pgsql/data/postgresql.conf