web-dev-qa-db-fra.com

La définition de shared_buffers dans postgresql.conf ne semble pas prendre effet

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.

8
Tom Swiss

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

10
Daniel Vérité

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).

5
Erwin Brandstetter

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
0
Postgres Help