Подтвердить что ты не робот

Настройки общей памяти postgresql

Привет всем!

В настоящее время мы имеем следующие параметры, относящиеся к общей памяти:

Postgres

shared_buffers = 7GB
max_connections = 1 500
max_locks_per_transaction = 1 024
max_prepared_transactions = 0 (not set)

система

SHMALL = 2 097 152
SHMMAX = 17 670 512 640
SHMMNI = 4096

Объем оперативной памяти составляет 24 693 176 тыс.

Нам нужно увеличить max_connections до 3 000. Когда мы попытались сделать это, мы получили сообщение об ошибке

[1-1] FATAL:  could not create shared memory segment: No space left on device
[2-1] DETAIL:  Failed system call was shmget(key=5432001, size=8964661248, 03600)
[3-1] HINT:  This error does *not* mean that you have run out of disk space.
It occurs either if all available shared memory IDs have been taken, in which
case you need to raise the SHMMNI parameter in your kernel, or because the
system overall limit for shared memory has been reached.  If you cannot
increase the shared memory limit, reduce PostgreSQL shared memory request
(currently 8964661248 bytes), perhaps by reducing shared_buffers or
max_connections.
The PostgreSQL documentation contains more information about shared memory
configuration.

В подсказке предлагается увеличить параметр ядра SHMMNI, но я не уверен, сколько добавить:) Кроме того, я считаю, что все эти параметры как-то коррелируют, поэтому нам нужно изменить любой другие параметры соответственно?

Спасибо заранее,

Александр

4b9b3361

Ответ 1

Увеличение SHMMNI не поможет, это имеет значение для второй части намека.

Получите размер вашей системной страницы с помощью команды оболочки getconf PAGE_SIZE.
Обычно это 4096. Умножьте это на SHMALL.

В вашем случае это должно быть 2097152 * 4096 = 8589934592, что составляет ровно 8 Гб. Это ваша текущая максимальная общая память, независимо от SHMMNI.

Сообщение об ошибке PostgreSQL указывает, что ему нужно немного больше.

Заключение: увеличение SHMALL.