2010-01-06 12 views
24

Estoy intentando iniciar mi servidor PostgreSQL en mi máquina local. Pero tengo un mensaje de error que dice:Configuración de valores de SHMMAX, etc. en MAC OS X 10.6 para PostgreSQL

FATAL: could not create shared memory segment: Invalid argument 
DETAIL: Failed system call was shmget(key=5432001, size=9781248, 03600). 
HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 9781248 bytes), reduce PostgreSQL's shared_buffers parameter (currently 1024) and/or its max_connections parameter (currently 13). 
If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for. 
The PostgreSQL documentation contains more information about shared memory configuration. 

que busco y mire a los documentos, pero todo lo que trata acerca de la configuración de kern.sysv.shmmax y kern.sysv.shmall está trabajando. ¿Cuáles son los ajustes correctos en Snow Leopard? Instalé postgres con macports.

+0

Intenta preguntar en serverfault.com. – pilcrow

+2

Aquí está el enlace a la misma pregunta en serverfault: http://serverfault.com/questions/10226/how-to-set-the-shmmax-parameter-on-mac-os-x – wallyqs

+0

Actualización: Postgres 9.3 y superior han sido reescritos para requerir solo una pequeña cantidad de memoria compartida. Cuando se usa> = 9.3, ya no será necesario ajustar los límites de la memoria compartida del kernel. http://www.depesz.com/2012/07/12/waiting-for-9-3-dramatically-reduce-system-v-shared-memory-consumption/ –

Respuesta

2

Advertencia: esta respuesta ha sido obselete por las versiones más recientes de OS X. Consulte la respuesta de Paul Legato a continuación.

En Mac OS X no puede cambiarse de shmmax después de que el sistema se haya iniciado. Hay que editar/etc/rc o /etc/sysctl.conf, y tener en cuenta que tiene que ser un múltiplo de 4096. Vea aquí http://www.postgresql.org/docs/8.4/static/kernel-resources.html

+4

Esto en realidad no afecta mi sistema incluso después de un reiniciar. – Paul

+9

Esto no es verdad. Puede cambiar shmmax y otras configuraciones de kernel en tiempo de ejecución, sin reinicio, con "sudo sysctl -w". –

+0

Me pregunto cuántas personas que votaron a favor de esta respuesta se dan cuenta de que ha quedado obsoleta por las versiones más recientes de OS X. – alvherre

4

Sé que esto es una vieja pregunta, pero creo que podría valer la pena señalar que si solo está utilizando PostgreSQL para fines de desarrollo puede estar seguro de entrar en postgres.conf (el directorio de datos después de haber hecho initdb) y cambiar la variable shared_buffers a algo un poco inferior. Por defecto es 28 MB o algo así. Pero de esta manera no está jugando con las variables de memoria compartida del sistema.

documentos
+2

Si bien esto funcionará, incluso el valor predeterminado es absurdamente pequeño para un sistema moderno con múltiples gigabytes de memoria disponibles. Postgres funciona * mucho * más rápido con mayores valores de shared_buffers y workmem cuando se trata de conjuntos de datos y consultas de cualquier complejidad. No hay nada intrínsecamente incorrecto en cambiar la configuración del kernel del sistema, siempre que lo esté haciendo de forma inteligente y no simplemente cambiándolos aleatoriamente. –

26

Tiene que aumentar la asignación máxima de memoria compartida del kernel a algo superior a lo que Postgres intenta asignar. (También puede disminuir las configuraciones de buffers compartidos o conexiones máximas en postgresql.conf para hacer que Postgres solicite menos memoria, pero los valores predeterminados ya son bastante pequeños para la mayoría de los casos de uso.)

Para hacer esto como una excepción , que dura hasta el próximo reinicio:

sudo sysctl -w kern.sysv.shmmax=12582912 
sudo sysctl -w kern.sysv.shmall=12582912 

Cambie el número exacto según corresponda para su configuración de Postgres; tiene que ser más grande que lo que Postgres dice que está pidiendo en el archivo de registro. Después de hacer ambas cosas, deberías poder iniciar Postgres.

Para que el cambio persista durante los reinicios, edite /etc/sysctl.conf y establezca los mismos valores allí.

Cuestiones relacionadas