PostgreSQL 和 Linux 内核

PostgreSQL 和 Linux 内核

我有一个 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 配置中配置的参数小,它就无法启动。

相关内容