it-swarm.com.de

Das Festlegen von shared_buffers in postgresql.conf scheint nicht wirksam zu werden

Wir sind auf CentOS Release 6.6, PostgreSQL Version 8.4.20. (Ja, das blutet nicht Edge.)

Im postgresql.conf, wir haben:

shared_buffers = 4096MB

kernel shm Werte sind gesetzt Nizza und hoch:

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

Wir haben viel Gedächtnis:

[[email protected] data]# free
             total       used       free     shared    buffers     cached
Mem:      31097812   30474972     622840    2873672    1961088   20565360
-/+ buffers/cache:    7948524   23149288
Swap:      1959920      93852    1866068

Doch der Wert für shared_buffers berichtet von pg_settings ist nur 512 MB groß, nicht die 4 GB in 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

Ja, wir haben einen vollständigen Neustart durchgeführt und SHOW config_file bestätigt, dass ich das richtige postgresql.conf.

Mein großer Dank geht an alle, die Einblick in dieses Geheimnis geben können.

8
Tom Swiss

Die kanonische Einheit für shared_buffers Besteht aus Seiten von 8kB. Der tatsächlich in Bytes zugewiesene Speicher lautet also:

524288 * 8192 = 4294967296 Oder 4096*1024*1024 Wie gewünscht.

Sie können die Größe des Speichersegments auch mit ipcs -m Überprüfen.

10
Daniel Vérité

Was @ Daniel erklärt so genau wird ziemlich offensichtlich, wenn Sie die entsprechende Spalte zu Ihrer Abfrage hinzufügen:

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

Oder nur:

SELECT * FROM pg_settings WHERE name = 'shared_buffers';

Beachten Sie die Projektrichtlinien für Ihre Postgres-Version "nicht blutend" (a.k.a. veraltet und nicht unterstützt).

5

habe das gleiche Problem und als ich die folgende Abfrage ausgeführt habe:

select * from pg_settings 

Ich habe eine Quelldatei, die auf postgresql.auto.conf verweist, also habe ich die Datei entfernt, da nur der Wert für shared_buffers in der Datei festgelegt und neu gestartet wurde

select *  from pg_settings where name='shared_buffers';

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