Назад | Перейти на главную страницу

PostgreSQL и ядро ​​Linux

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

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

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

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

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

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

TL; DR: увеличивать kernel.shmmax больше не нужно.

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

Это привык к есть эта рекомендация: https://www.postgresql.org/docs/9.2/static/kernel-resources.html который сейчас устаревший (9.2 был завершен в 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, он просто не может запуститься.