我有一个 Postgres 9.5 来提供 OpenStreetMap 数据库(大约 500GB 的数据)
我是配置服务器的真正新手,只需按照以下说明操作:http://pgtune.leopard.in.ua/
但是...读完 araqnid 的回答后这里我需要知道改变是否kernel.shmmax
真的很重要。
我的服务器有 8 个核心、一个 SATA HDD 和 64 GB RAM,并且运行 PostgreSQL + Tomcat + Geoserver,有时地图生成很痛苦(生成所有图像缓存后就没问题了)。
使用时htop
我可以看到核心和内存运行松散,并且磁盘 I/O 非常高。
正确的值是多少kernel.shmmax
以及我还能更改什么?
答案1
TL;DR:增加 kernel.shmmax 不再是必要的。
PostgreSQL 在 9.3 版本之前需要很大的空间kernel.shmmax
,因为它的“共享缓冲区”是使用 SysV 共享内存分配的。
它习惯有这样的建议: https://www.postgresql.org/docs/9.2/static/kernel-resources.html 现在过时的(9.2 已于 2017 年停产)。
最重要的共享内存参数是 SHMMAX,即共享内存段的最大大小(以字节为单位)。如果您从 shmget 收到类似“无效参数”的错误消息,则很可能已超出此限制。所需共享内存段的大小取决于几个 PostgreSQL 配置参数,如表 17-2 所示。(您可能收到的任何错误消息都将包含失败的分配请求的确切大小。)作为临时解决方案,您可以降低其中一些设置以避免失败。虽然可以让 PostgreSQL 在 SHMMAX 最小为 2 MB 的情况下运行,但您需要更大的 SHMMAX 才能获得可接受的性能。理想的设置为数百兆字节到几千兆字节。
但这不是你使用的版本。对于 9.5,请参阅以下文档: https://www.postgresql.org/docs/9.5/static/kernel-resources.html:
PostgreSQL 要求每个服务器副本使用几个字节的 System V 共享内存(在 64 位平台上通常为 48 字节)。在大多数现代操作系统上,可以轻松分配此数量。
答案2
您应该更改您在 中配置的kernel.shmmax
相应shared_buffers
参数postgresql.conf
。如果kernel.shmmax
比在 postgresql 配置中配置的参数小,它就无法启动。