PostgreSQL и ядро ​​Linux

У меня есть Postgres 9.5 для обслуживания базы данных OpenStreetMap (около 500 ГБ данных)

Я новичок в настройке сервера и просто следую инструкциям: http://pgtune.leopard.in.ua/

Но... прочитав ответ аракнида здесь, мне нужно знать, если меняю kernel.shmmax это действительно важно.

Мой сервер имеет 8 ядер, жесткий диск SATA и 64 ГБ оперативной памяти и работает под управлением PostgreSQL + Tomcat + Geoserver, и иногда генерация карт является болезненной (это хорошо после всех созданных кэшей изображений).

С помощью htop Я вижу, как работают ядра и память, а также очень высокий дисковый ввод-вывод.

каково правильное значение для kernel.shmmax и что еще я могу изменить?

2 ответа

Решение

TL;DR: увеличение kernel.shmmax больше не требуется.

PostgreSQL раньше требовался большой kernel.shmmax до версии 9.3, поскольку его "общие буферы" были распределены с использованием общей памяти SysV.

Раньше у него была такая рекомендация: https://www.postgresql.org/docs/9.2/static/kernel-resources.html который сейчас устарел ( 9.2 был выпущен EOL в 2017 году).

Наиболее важным параметром разделяемой памяти является SHMMAX, максимальный размер в байтах сегмента разделяемой памяти. Если вы получили сообщение об ошибке от shmget, например "Неверный аргумент", вероятно, этот предел был превышен. Размер требуемого сегмента разделяемой памяти варьируется в зависимости от нескольких параметров конфигурации PostgreSQL, как показано в Таблице 17-2. (Любое сообщение об ошибке, которое вы можете получить, будет содержать точный размер неудавшегося запроса на выделение.) В качестве временного решения вы можете уменьшить некоторые из этих параметров, чтобы избежать сбоя. Хотя PostgreSQL можно запустить с SHMMAX всего 2 МБ, для приемлемой производительности требуется значительно больше. Желательные настройки - от сотен мегабайт до нескольких гигабайт.


Но это не та версия, которую вы используете. Для версии 9.5 см. Документацию по адресу https://www.postgresql.org/docs/9.5/static/kernel-resources.html:

PostgreSQL требуется несколько байтов разделяемой памяти System V (обычно 48 байтов на 64-битных платформах) для каждой копии сервера. В большинстве современных операционных систем эта сумма может быть легко выделена.

Вы должны изменить свой kernel.shmmax согласно shared_buffers параметр настроен в вашем postgresql.conf, Если kernel.shmmax будет меньше, чем настроено в конфиге postgresql, просто не может запуститься.

Другие вопросы по тегам