2012-09-27 14 views
11

Hallo alle!Postgresql Shared Memory Einstellungen

wir gegenwärtig haben die folgenden Parameter in Bezug auf gemeinsam genutzten Speicher:

postgres

shared_buffers = 7GB 
max_connections = 1 500 
max_locks_per_transaction = 1 024 
max_prepared_transactions = 0 (not set) 

System

SHMALL = 2 097 152 
SHMMAX = 17 670 512 640 
SHMMNI = 4096 

Die Menge an RAM ist 24 693 176k

Wir brauchen max_connections-3 000 zu erhöhen, wenn wir dies zu tun versucht, bekamen wir einen Fehler

[1-1] FATAL: could not create shared memory segment: No space left on device 
[2-1] DETAIL: Failed system call was shmget(key=5432001, size=8964661248, 03600) 
[3-1] HINT: This error does *not* mean that you have run out of disk space. 
It occurs either if all available shared memory IDs have been taken, in which 
case you need to raise the SHMMNI parameter in your kernel, or because the 
system's overall limit for shared memory has been reached. If you cannot 
increase the shared memory limit, reduce PostgreSQL's shared memory request 
(currently 8964661248 bytes), perhaps by reducing shared_buffers or 
max_connections. 
The PostgreSQL documentation contains more information about shared memory 
configuration. 

Der Hinweis SHMMNI Kernel-Parameter zu erhöhen, schlägt, aber ich bin nicht sicher, wie viel hinzuzufügen :) Außerdem glaube ich, dass all diese Parameter irgendwie korrelieren, also müssen wir irgendwelche anderen Parameter entsprechend ändern?

Vielen Dank im Voraus,

Alexander

Antwort

17

Erhöhung SHMMNI wird nicht helfen, es ist der zweite Teil des Hinweises, dass es hier ankommt.

Ermitteln Sie die Seitengröße Ihres Systems mit dem Shell-Befehl getconf PAGE_SIZE.
Normalerweise ist es 4096. Multiplizieren Sie das mit SHMALL.

In Ihrem Fall sollte das 2097152 * 4096 = 8589934592 sein, was genau 8 GB ist. Das ist Ihr momentaner maximaler gemeinsamer Speicher, unabhängig von SHMMNI.

PostgreSQL Fehlermeldung zeigt an, dass es ein bisschen mehr braucht.

Fazit: erhöhen SHMALL.

+2

vielen dank für die antwort! – shutyaev

+1

Hinweis: Laut dem Linux-Abschnitt in der Dokumentation (postgresql.org/docs/9.0/static/kernel-resources.html) sollte der Wert von SHMALL PAGE_SIZE geteilt durch SHMAX sein. –