Перейти к содержимому
1 / 10

Пул соединений и PgBouncer: какой режим выбрать и чем это ограничивает приложение?

У PostgreSQL каждое соединение — отдельный процесс, поэтому тысяча соединений от приложения это тысяча процессов и гигабайты памяти при полезной работе на десятки одновременных запросов. Пул решает это на двух уровнях: в приложении (пул драйвера, живёт в процессе) и внешний пулер (PgBouncer, один на всех). Режимы PgBouncer различаются тем, когда серверное соединение возвращается в пул. session — после отключения клиента, совместим со всем, но экономии мало. transaction — после каждой транзакции, основной рабочий режим, дающий кратное сокращение числа соединений; ценой того, что сессионные вещи ломаются: временные таблицы, SET без LOCAL, курсоры вне транзакции, LISTEN/NOTIFY, advisory-блокировки уровня сессии. Подготовленные выражения в transaction-режиме поддерживаются с PgBouncer 1.21 при включённом max_prepared_statements. statement — максимально жёсткий, запрещает многооператорные транзакции.

Пул соединений и PgBouncer: какой режим выбрать и чем это ограничивает приложение? | JScriptiser