При увеличении значения shared_buffers получаем: The PostgreSQL documentation contains more information about shared memory configuration. FATAL: could not create shared memory segment: Invalid argument DETAIL: Failed system call was shmget(key=5432001, size=1099882496, 03600). HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 1099882496 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections. If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for. The PostgreSQL documentation contains more information about shared memory configuration.
Параметр shared_buffers должен быть меньше параметра ядра - kern.ipc.shmmax
Смотрю, что у меня:
sysctl -a | grep kern.ipc.shmmax kern.ipc.shmmax: 536870912
Высчитываем (в итоге до 512 мегабайт возможное значение в теории):
shared_buffers <= 536870912 / 1024 / 1024 = 512
От параметра ядра kern.ipc.shmmax небудет толку если неправильно указан kern.ipc.shmall (определяет размер всей разделяемой памяти)
Обычно он равен - kern.ipc.shmmax / PAGE_SIZE
В свою очередь PAGE_SIZE обычно равен 4096 байт
Смотрим:
sysctl -a | grep kern.ipc.shmall kern.ipc.shmall: 131072
Подводим итог: для того, чтоб задать shared_buffers чуть менее 512Мb нужны такие параметры:
kern.ipc.shmall: 262144
kern.ipc.shmmax: 1073741824 (при таком значении shared_buffers можно задать значение до 1024Mb, 1073741824/1024/1024 = 1024)
Смотрим общий вывод параметров:
ipcs -M shminfo: shmmax: 536870912 (max shared memory segment size) shmmin: 1 (min shared memory segment size) shmmni: 192 (max number of shared memory identifiers) shmseg: 128 (max shared memory segments per process) shmall: 131072 (max amount of shared memory in pages)
Задаем параметры для старта системы:
/etc/sysctl.conf
kern.ipc.shmall=524288
kern.ipc.shmmax=2147483648
kern.ipc.shmmin=1
Задаем параметры на лету:
sysctl kern.ipc.shmall=524288
sysctl kern.ipc.shmmax=2147483648
sysctl kern.ipc.shmmin=1
Устанавливаем параметр в postgresql.conf:
shared_buffers = 1536MB
Комментарии пользователей
Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!