Изменение параметра `max_connections` для PostgreSQL на Single инсталляции SimpleOne

Изменение параметра max_connections для PostgreSQL на Single инсталляции SimpleOne

:stop_sign: Операции с базой данных потенциально небезопасны. Любые изменения конфигурации необходимо предварительно протестировать на dev, test или sandbox инстансах перед применением на продуктивном окружении.


Чем опасно завышенное значение max_connections

Каждое соединение в PostgreSQL — это отдельный серверный процесс, потребляющий оперативную память даже в простое. Чрезмерное увеличение параметра может привести к:

  • OOM (Out of Memory) — ядро Linux принудительно завершит процесс PostgreSQL при нехватке RAM, что приведёт к полному падению базы данных
  • Деградация производительности — избыточное количество процессов вызывает рост конкуренции за блокировки и постоянное переключение контекста CPU, замедляя все запросы
  • Нестабильная работа инстанса — даже если соединения простаивают, PostgreSQL резервирует под них ресурсы, сокращая объём памяти, доступный для кэша и выполнения запросов

:open_book: Официальная документация: postgresql.org — Connection Settings


1. Проверка текущего значения

Перед внесением изменений убедитесь, какое значение установлено сейчас.

С хоста — через PostgreSQL:

docker exec -it postgres su - postgres -c 'psql -c "SHOW max_connections;"'

С хоста — через Patroni:

docker exec -it postgres su - postgres -c 'patronictl show-config | grep max_connections'

2. Изменение параметра через Patroni

Зайдите с хоста в контейнер под пользователем postgres:

docker exec -it postgres su - postgres

Далее все команды выполняются внутри контейнера.

Запустите редактор конфигурации Patroni:

patronictl edit-config

Откроется конфигурация кластера. Найдите секцию postgresql.parameters и измените значение max_connections:

postgresql:
  parameters:
    ...
    max_connections: 100          # <-- изменяем это значение
    ...

Сохраните файл и выйдите из редактора. Patroni покажет diff изменений и запросит подтверждение:

-    max_connections: 100
+    max_connections: 200

Apply these changes? [y/N]: y
Configuration changed

3. Перезапуск кластера

Параметр max_connections требует перезапуска PostgreSQL.

:warning: Внимание: перезапуск кластера приводит к кратковременному простою инстанса!
Планируйте выполнение в согласованное окно обслуживания.

Внутри контейнера выполните patronictl list, чтобы узнать имя кластера и убедиться, что в колонке Pending restart стоит *:

patronictl list
+ Cluster: postgres-firsulov
+--------------------------+------------+--------+---------+----+-------+-----------------+
| Member                   | Host       | Role   | State   | TL | Lag   | Pending restart |
+--------------------------+------------+--------+---------+----+-------+-----------------+
| postgres-single-inst-prod| 172.25.0.3 | Leader | running |  5 |       | *               |
+--------------------------+------------+--------+---------+----+-------+-----------------+

:pushpin: Имя кластера указано в строке + Cluster: — в данном примере это postgres-firsulov.

Выполните перезапуск, указав имя кластера:

patronictl restart postgres-firsulov

Patroni последовательно задаст несколько вопросов — отвечайте по порядку:

When should the restart take place (e.g. 2026-02-20T12:59) [now]:          # нажмите Enter
Are you sure you want to restart members postgres-single-instance-prod?
[y/N]: y                                                                   # введите y
Restart if the PostgreSQL version is less than provided (e.g. 9.5.2) []:   # нажмите Enter
Success: restart on member postgres-single-instance-prod

4. Проверка после перезапуска

Убедитесь внутри контейнера, что новое значение применилось:

psql -c "SHOW max_connections;"
patronictl show-config | grep max_connections

Оба значения должны совпадать и соответствовать тому, что вы указали в шаге 2.


Краткая шпаргалка

Шаг Где Команда
Посмотреть текущее значение хост docker exec -it postgres su - postgres -c 'psql -c "SHOW max_connections;"'
Посмотреть конфиг Patroni хост docker exec -it postgres su - postgres -c 'patronictl show-config | grep max_connections'
Войти в контейнер хост docker exec -it postgres su - postgres
Изменить параметр контейнер patronictl edit-config
Узнать имя кластера контейнер patronictl list
Перезагрузка кластера для применения изменений (приведёт к простою инстанса) контейнер patronictl restart <ИМЯ_КЛАСТЕРА>
1 лайк