Postgres -system配置了少于32mb的共享内存

时间:2011-12-20 04:13:29

标签: postgresql

在我的Mac上安装Postgres,我得到了关于共享内存的警告。它向我推荐了改变这一点的自述文件,但对我来说并非100%清楚。

通过将kern.sysv.shmall设置为等于kearn.sysv.shmmax(即设置为1610612736),现在是否可以正确配置共享内存?

在具有2GB RAM的MacBook Pro上,作者的sysctl.conf包含:

kern.sysv.shmmax=1610612736
kern.sysv.shmall=393216
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
kern.maxprocperuid=512
kern.maxproc=2048

Note that (kern.sysv.shmall * 4096) should be greater than or equal to
kern.sysv.shmmax. kern.sysv.shmmax must also be a multiple of 4096.

3 个答案:

答案 0 :(得分:2)

这肯定会涵盖你需要用PostgreSQL完成的任务。

我不知道我是否会将SHMMAX设置为1.6GB,但如果你需要将它设置为32MB以上,只需将SHMMAX设置为

kern.sysv.shmmax=67108864

其余的你可以保持原样。

答案 1 :(得分:0)

我相信当我在安装postgresql(9.1.4)后第一次调用initdb时遇到错误消息时,我遇到了相同或类似的问题。我一直关注这个guide

致电initdb后,我得到了:

Justins-MacBook-Air:etc justinbrown$ initdb /usr/local/var/postgres -E utf8
The files belonging to this database system will be owned by user "justinbrown".
This user must also own the server process.

The database cluster will be initialized with locale en_CA.UTF-8.
The default text search configuration will be set to "english".

creating directory /usr/local/var/postgres ... ok
creating subdirectories ... ok
selecting default max_connections ... 10
selecting default shared_buffers ... 400kB
creating configuration files ... ok
creating template1 database in /usr/local/var/postgres/base/1 ... FATAL:  could not create shared memory segment: Cannot allocate memory
DETAIL:  Failed system call was shmget(key=1, size=2138112, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory or swap space, or exceeded your kernel's SHMALL parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMALL.  To reduce the request size (currently 2138112 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
    The PostgreSQL documentation contains more information about shared memory configuration.
child process exited with exit code 1
initdb: removing data directory "/usr/local/var/postgres"

我最终找到answer,将sysctl.conf文本复制到我自己的文件中,然后重新启动(直到重新启动后才工作)虽然我不完全理解如何,但现在一切似乎都工作了

答案 2 :(得分:0)

取自下载/安装目录中的README文件,

!!!测试和工作。

PostgreSQL One Click Installer自述文件

共享内存

PostgreSQL广泛使用共享内存进行缓存和进程间处理 通讯。不幸的是,Mac OS X的默认配置确实如此 不允许创建适当数量的共享内存来运行 数据库服务器。

在运行安装之前,请确保您的系统正常运行 配置为允许使用更大量的共享内存。注意 这不会保留'任何内存,所以配置更高是安全的 价值比您最初可能需要的。您可以通过编辑来完成此操作 文件/etc/sysctl.conf - 例如

%sudo vi /etc/sysctl.conf

在具有2GB RAM的MacBook Pro上,作者的sysctl.conf包含:

kern.sysv.shmmax = 1610612736

kern.sysv.shmall = 393216

kern.sysv.shmmin = 1

kern.sysv.shmmni = 32

kern.sysv.shmseg = 8

kern.maxprocperuid = 512

kern.maxproc = 2048

请注意(kern.sysv.shmall * 4096)应大于或等于 kern.sysv.shmmax。 kern.sysv.shmmax也必须是4096的倍数。

编辑(或创建)文件后,请在继续之前重新启动 安装。如果您想检查当前使用的设置 在内核中,您可以使用sysctl实用程序:

%sysctl -a

现在可以安装数据库服务器。

有关PostgreSQL使用共享内存的更多信息,请参阅:

http://www.postgresql.org/docs/current/static/kernel-resources.html#SYSVIPC

支持

有关此安装程序的帮助,请访问论坛:

http://forums.enterprisedb.com/forums/show/9.page

有关安装程序中软件包的帮助,请访问软件包 网站。