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, просто не может запуститься.