Пулер соединений PgBouncer
В PostgreSQL TimescaleDB для обработки каждого соединения клиента создается отдельный процесс. Чем больше число соединений, тем больше процессов, которые используют оперативную память. Максимальное число соединений с процессом PostgreSQL TimescaleDB определяется параметром max_connections
.
Чтобы оптимизировать потребление ресурсов, можно использовать пулер соединений. Клиенты подключаются не напрямую к PostgreSQL TimescaleDB, а к пулеру соединений. При этом поддерживается небольшое количество соединений между пулером и сервером PostgreSQL TimescaleDB — пулер создает новое соединение или повторно использует одно из существующих. Количество соединений между пулером и базой данных на каждой из нод кластера определяется размером пула (параметр pool_size
).
В кластерах облачных баз данных PostgreSQL TimescaleDB используется пулер соединений PgBouncer. Доступно три режима пулинга PgBouncer. Подробнее о пулере соединений в документации PgBouncer.
Максимальное число соединений с процессом PostgreSQL (max_connections)
Параметр СУБД PostgreSQL TimescaleDB max_connections
определяет максимальное число одновременных соединений с процессом PostgreSQL TimescaleDB. По умолчанию установлено значение 100 соединений.
Вы можете изменить значение параметра в настройках СУБД в панели управления на значение максимального количества соединений при нагрузке. Учитывайте, что каждое соединение расходует ресурсы оперативной памяти.
Изменение значения max_connections
влечет за собой перезагрузку нод кластера PostgreSQL TimescaleDB.
Размер пула (pool_size)
Размер пула (параметр pool_size
) — это максимальное число соединений между пулером соединений и каждой базой данных PostgreSQL TimescaleDB на каждой из нод кластера.
Размер пула можно выбрать при создании кластера и изменить размер в созданном кластере. Доступные значения — от 1 до 500.
Режимы пулинга
Режим пулинга — это стратегия соединения клиента с PostgreSQL TimescaleDB. В кластерах облачных баз данных PostgreSQL TimescaleDB используется пулер соединений PgBouncer. Подробнее о пулере соединений в документации PgBouncer.
PgBouncer поддерживает три режима:
По умолчанию в облачных базах данных используется режим транзакции (transaction).
Режим пулинга можно выбрать при создании кластера и изменить режим в созданном кластере.
Режим транзакции (transaction)
Соединение с PostgreSQL TimescaleDB поддерживается до тех пор, пока не завершится транзакция. Когда транзакция завершается, пулер возвращает соединение в пул. Позже это соединение может повторно использоваться этим же клиентом для других подключений или другим клиентом.
Общее количество клиентских подключений к PgBouncer может достигать 10 000, но количество активных транзакций определяет размер пула. Например, если размер пула равен 30, то активных транзакций будет 30.
Количество соединений между пулером соединений и каждой базой данных PostgreSQL TimescaleDB на каждой из нод кластера также определяется размером пула.
Клиент может одновременно выполнять несколько транзакций на разных соединениях. При этом каждое соединение между пулером соединений и сервером PostgreSQL TimescaleDB в течение своего жизненного цикла может выполнять транзакции разных клиентов.
Режим транзакции снижает нагрузку на ресурсы СУБД, если есть большое количество клиентских подключений с низкой нагрузкой.
Ограничения режима transaction
Режим transaction нарушает работу некоторых механизмов PostgreSQL TimescaleDB. Выберите другой режим, если клиенты используют эти опции. Некоторые флаги подключения могут распределяться между разными клиентами — это может привести к непредсказуемому поведению и некорректным результатам.
В режиме transaction не работают:
- команды SET/RESET и LISTEN/NOTIFY;
- WITH HOLD CURSOR;
- PRESERVE/DELETE ROWS во временных таблицах;
- подготовленные операторы (prepared statements): protocol-level prepared plans, PREPARE, DEALLOCATE;
- оператор LOAD;
- рекомендательные блокировки Session-level advisory locks.
Подробнее о несовместимых опциях в документации PgBouncer.
Режим сессии (session)
В режиме сессии клиент может продолжать отправлять запросы до тех пор, пока продолжается сессия — соединение между пулером соединений и сервером PostgreSQL TimescaleDB будет поддерживаться до отключения клиента от базы данных.
Количество подключений между пулером соединений и сервером PostgreSQL TimescaleDB определяется размером пула. На каждое подключение клиента используется подключение между пулером и сервером PostgreSQL TimescaleDB. Соединение возвращается в пул и может быть повторно использовано только после отключения предыдущего клиента от базы данных.
В отличие от режима транзакции (transaction), этот режим безопасен, повторяет прямое подключение к PostgreSQL TimescaleDB, поддерживает все механизмы и подходит для всех клиентов PostgreSQL TimescaleDB. При использовании этого режима нагрузка на ресурсы не снижается.
Этот режим соединений полезен для клиентов, у которых много короткоживущих подключений к базе данных, потому что в таком режиме увеличивается скорость подключения к СУБД.
Режим оператора (statement)
Пулер вернет соединение в пул, как только будет обработан первый запрос — транзакции с несколькими операторами прервутся, пулер вернет ошибку.
Этот режим позволяет использовать больше клиентских подключений, чем в режиме транзакции. Режим подойдет, если известно, что каждая транзакция ограничена только одним запросом (включен AUTOCOMMIT).
Изменить режим пулинга
Если вы выбираете режим транзакции (transaction), ознакомьтесь с ограничениями этого режима.
- В панели управления перейдите в раздел Облачная платформа → Базы данных.
- Откройте страницу кластера → вкладка Настройки.
- В блоке Пулер соединений нажмите Изменить и выберите режим пулинга.
- Нажмите Сохранить.
Изменить размер пула
- В панели управления перейдите в раздел Облачная платформа → Базы данных.
- Откройте страницу кластера → вкладка Настройки.
- В блоке Пулер соединений нажмите Изменить и измените размер пула.
- Нажмите Сохранить.