PostgreSQL. max_connections

Изучаю конфигурационные параметры PostgreSQL (конкретно сейчас – PostgreSQL 10). Параметров этих очень много, начну с одного из самых главных – max_connections.

Конфигурационные параметры PostgreSQL лежат в каталоге с данными (PGDATA) в файлике postgresql.conf.

  • Параметр: max_connections
  • Раздел: Подключение и аутентификация / Настройки соединения
  • Изменение: Требует перезагрузки сервера
  • Принимаемое значение: integer
  • Минимальное значение: 1
  • Максимальное значение: 262143
  • Значение по умолчанию: 100
  • Взаимосвязь
    • superuser_reserved_connections
    • max_wal_senders
    • и еще много разных… (для некоторых параметров и внутренних значений есть формулы, которые основываются на max_connections)
  • Описание: В max_connections хранится максимальное число конкурентных подключений к серверу PostgreSQL. Под каждое фактическое подключение создается отдельный процесс в операционной системе.

Если подключений будет больше, появится сообщение «FATAL: sorry, too many clients already».

Если задать значение больше максимального, сервер не перезагрузится, будет ругаться на то, что есть ошибки в конфиг-файле (что параметр max_connections больше допустимого диапазона). Если сделать значение -1, будет та же ошибка при рестарте.

Похоже, у параметра max_connections есть взаимосвязь с параметром shared_buffers и, даже, есть проверка максимальной доступной памяти для машины, на которой запускается PostgreSQL. Если выставить max_connections большое значение (например, 200 000, что меньше разрешенного максимального значения), появится ошибка «Cannot allocate memory». Скорее всего срабатывает проверка: max_connections умножается на величину страницы буфера и проверяется, можно ли выделить столько памяти на данной машине (это только мои предположения).

В общем, пока эксперименты мои здесь продолжаются. Что имеем по факту – если теоретическая память, которую нужно выделить для корректной работы PostgreSQL больше той памяти, которую фактически можно выделить – PostgreSQL это проверит и выдаст сообщение об ошибке.

  • Как посмотреть
    • Команда SHOW max_connections (отработает как для psql, так и в pgAdmin):

pgAdmin. show max_connections

    • Запросом: select * from pg_settings s where name = ‘listen_addresses’:

pgAdmin. max_connections

Из этого запроса можно много чего интересного узнать (тот же max/min_val, или необходимость перезагрузки сервера для того, чтобы новое значение параметра вступило в силу – это последнее поле в запросе pending_restart).

В PostgreSQL параметров очень много, каждый из них по-особенному настраивается и имеет много взаимосвязей как с другими параметрами из конфигурационного файла, так и с параметрами машины. Есть где покопаться 🙂


Be the first to comment

Leave a Reply

Ваш Mail не будет опубликован.


*