Пулер соединений 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), ознакомьтесь с ограничениями этого режима.
- В панели управления в верхнем меню нажмите Продукты и выберите Облачные базы данных.
- Откройте вкладку Активные.
- Откройте страницу кластера → вкладка Настройки.
- В блоке Пулер соединений нажмите Изменить и выберите режим пулинга.
- Нажмите Сохранить.
Изменить размер пула
- В панели управления в верхнем меню нажмите Продукты и выберите Облачные базы данных.
- Откройте вкладку Активные.
- Откройте страницу кластера → вкладка Настройки.
- В блоке Пулер соединений нажмите Изменить и измените размер пула.
- Нажмите Сохранить.