Установка значений SHMMAX и т. Д. В MAC OS X 10.6 для PostgreSQL - PullRequest
24 голосов
/ 07 января 2010

Я пытаюсь запустить свой сервер 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.  

Я ищу и смотрю документы, но все, что я пытаюсь настроить Kern.sysv.shmmax и kern.sysv.shmall, работает. Каковы правильные настройки на Snow Leopard? Я установил postgres с macports.

Ответы [ 4 ]

27 голосов
/ 17 мая 2012

Вы должны увеличить максимальный допуск разделяемой памяти ядра до чего-то большего, чем то, что Postgres пытается выделить.(Вы также можете уменьшить общие буферы или параметры максимального подключения в postgresql.conf, чтобы Postgres запрашивал меньше памяти, но значения по умолчанию уже довольно малы для большинства случаев использования.)

Чтобы сделать это как единое целое-off, до следующей перезагрузки:

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

Измените точное число в соответствии с вашими настройками Postgres;он должен быть больше, чем то, о чем говорит Postgres в лог-файле.Выполнив оба эти действия, вы сможете запустить Postgres.

Чтобы сохранить изменение после перезагрузки, отредактируйте файл /etc/sysctl.conf и установите там те же значения.

8 голосов
/ 29 сентября 2011

Apple документирует, как настроить их для Snow Leopard здесь:

http://support.apple.com/kb/HT4022: Mac OS X Server v10.6: настройка значений сегмента общей памяти

sysctl позволяет временно их изменять.

4 голосов
/ 18 января 2011

Я знаю, что это старый вопрос, но я думаю, что, возможно, стоит отметить, что , если вы просто используете PostgreSQL для целей разработки , вы можете спокойно заходить в postgres.conf (каталог данных после выполнения initdb) и измените переменную shared_buffers на что-то чуть ниже. По умолчанию это 28 МБ или что-то. Но, таким образом, вы не будете возиться с системными переменными общей памяти.

2 голосов
/ 07 января 2010

Предупреждение: этот ответ устарел в новых версиях OS X. Пожалуйста, обратитесь к ответу Пола Легато ниже.

В Mac OS X вы не можете изменить shmmax после загрузки системы. Вам необходимо отредактировать / etc / rc или /etc/sysctl.conf и помнить, что он должен быть кратным 4096. Смотрите здесь http://www.postgresql.org/docs/8.4/static/kernel-resources.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...