2012-09-27 35 views
11

¡Hola a todos!configuración de memoria compartida postgresql

Tenemos en la actualidad los siguientes parámetros relacionados con la memoria compartida:

postgres

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

sistema

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

La cantidad de memoria RAM es de 24 693 176k

necesitamos aumentar max_connections a 3 000. Cuando tratamos de hacer esto, tenemos un error

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

La sugerencia propone aumentar parámetro del núcleo shmmni, pero no estoy seguro acerca de cómo mucho para agregar :) Además, creo que todos estos parámetros se correlacionan de alguna manera, ¿entonces tenemos que cambiar cualquier otro parámetro en consecuencia?

Gracias de antemano,

Alexander

Respuesta

17

El aumento SHMMNI no ayudará, es la segunda parte de la pista que importa aquí.

Obtenga el tamaño de página de su sistema con el comando de shell getconf PAGE_SIZE.
Usualmente es 4096. Multiplique eso por SHMALL.

En su caso debería ser 2097152 * 4096 = 8589934592, que es exactamente 8Gb. Esa es su memoria compartida máxima actual, independientemente de SHMMNI.

El mensaje de error de PostgreSQL indica que necesita un poco más que eso.

Conclusión: aumentar SHMALL.

+2

muchas gracias por la respuesta! – shutyaev

+1

Nota: según la sección de Linux en los documentos (postgresql.org/docs/9.0/static/kernel-resources.html), el valor de SHMALL debe ser el PAGE_SIZE dividido por SHMAX. –

Cuestiones relacionadas