Изучаю конфигурационные параметры 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):
-
- Запросом: select * from pg_settings s where name = ‘listen_addresses’:
Из этого запроса можно много чего интересного узнать (тот же max/min_val, или необходимость перезагрузки сервера для того, чтобы новое значение параметра вступило в силу – это последнее поле в запросе pending_restart).
В PostgreSQL параметров очень много, каждый из них по-особенному настраивается и имеет много взаимосвязей как с другими параметрами из конфигурационного файла, так и с параметрами машины. Есть где покопаться 🙂
Leave a Reply