为PostgreSQL在MAC OS X 10.6上设置SHMMAX等值

时间:2010-01-06 23:00:29

标签: postgresql configuration macos

我正在尝试在本地计算机上启动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的正确设置是什么?我用macports安装了postgres。

4 个答案:

答案 0 :(得分:27)

您必须将内核的最大共享内存容量增加到高于Postgres尝试分配的容量。 (您还可以减少postgresql.conf中的共享缓冲区或最大连接数设置,以使Postgres要求更少的内存,但对于大多数用例,默认值已经相当小。)

要做到这一点,一直持续到下次重启:

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

根据您的Postgres设置更改确切的数字;它必须比Postgres在日志文件中所要求的更大。完成这两个后,你应该能够启动Postgres。

要在重新启动后保持更改,请编辑/etc/sysctl.conf并在那里设置相同的值。

答案 1 :(得分:8)

Apple在此处记录了如何为Snow Leopard调整它们:

  

http://support.apple.com/kb/HT4022:Mac OS X Server v10.6:调整共享内存段值

sysctl允许您暂时更改它们。

答案 2 :(得分:4)

我知道这是一个老问题,但我认为值得注意的是 如果您只是将PostgreSQL用于开发目的 ,那么您可能会安全进入postgres.conf(完成initdb之后的数据目录)并将shared_buffers变量更改为更低的值。它默认为28MB或者其他东西。 但是这样你就不会搞乱系统共享内存变量了。

答案 3 :(得分:2)

警告:OS X的新版本已经过了这个答案。请参考下面的Paul Legato答案。

在Mac OS X中,您无法在系统启动后更改shmmax。你需要编辑/etc/rc或/etc/sysctl.conf,并记住它需要是4096的倍数。见这里 http://www.postgresql.org/docs/8.4/static/kernel-resources.html