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

pri*_*ter 24 postgresql macos configuration

我正在尝试在我的本地计算机上启动我的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.  
Run Code Online (Sandbox Code Playgroud)

我搜索并查看了文档,但我尝试设置kern.sysv.shmmax和kern.sysv.shmall的所有工作都正常.Snow Leopard的正确设置是什么?我用macports安装了postgres.

Pau*_*ato 28

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

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

sudo sysctl -w kern.sysv.shmmax=12582912
sudo sysctl -w kern.sysv.shmall=12582912
Run Code Online (Sandbox Code Playgroud)

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

要使更改在重新引导后保持不变,请编辑/etc/sysctl.conf并在其中设置相同的值.


Chr*_*phe 8

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

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

sysctl允许您临时更改它们.


alv*_*rre 2

警告:此答案已被较新版本的 OS X 废弃。请参考下面 Paul Legato 的答案。

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

  • 这不是真的。您可以使用“sudo sysctl -w”在运行时更改 shmmax 和其他内核设置,而无需重新启动。 (10认同)
  • 即使重新启动后,这实际上也不会影响我的系统。 (4认同)