Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Lakebase включает встроенный менеджер пула соединений PgBouncer, который поддерживает пул серверных соединений и использует их совместно для множества клиентских подключений. Пулизатор поддерживает до 10 000 параллельных клиентских подключений, что делает его подходящим для бессерверных функций, веб-API и других приложений, которые открывают множество коротких подключений.
Для использования пула подключений требуется встроенная аутентификация Postgres по паролю. Она недоступна для ролей OAuth.
Принцип работы пула подключений
Каждое подключение Postgres потребляет ресурсы сервера, так как Postgres создает отдельный процесс для каждого клиента. По мере роста одновременных подключений они могут быстро исчерпать ограничение подключения сервера.
Пул подключений находится между приложением и Postgres. Клиенты подключаются к пулу, а пулер перенаправит запросы к меньшему пулу фактических подключений к серверу. Lakebase запускает PgBouncer в режиме транзакции, поэтому подключение к серверу хранится только в течение одной транзакции, а затем возвращается в пул. Это позволяет многим клиентам совместно использовать небольшой пул подключений к серверу.
Пулы подключений
PgBouncer создает отдельный пул для каждой комбинации базы данных и пользователя. Два пользователя, подключающиеся к одной базе данных, получают независимые пулы. Размер каждого пула составляет около 90% ограничения Postgres max_connections , который зависит от размера вычислительных ресурсов.
Когда все подключения в пуле используются, новые клиентские запросы ожидают в очереди. Если подключение к серверу не станет доступным в течение 2 минут, клиент получает ошибку времени ожидания.
На схеме показано, как несколько клиентских подключений от разных пользователей направляются через отдельные пулы PgBouncer (один на комбинацию пользователей или базы данных), которые совместно используют ограниченное количество фактических подключений Postgres.
Ограничения подключения
Три ограничения управляют пулом подключений:
| Ограничение | Ценность | Что он контролирует |
|---|---|---|
Клиентские подключения (max_client_conn) |
10 000 | Максимальное количество подключений из приложения к PgBouncer |
Размер пула (default_pool_size) |
около ~90% max_connections |
Активные подключения к серверу на пару (пользователь, база данных) |
Прямые подключения (max_connections) |
Зависит от размера вычислительных ресурсов | Максимальное число прямых подключений Postgres |
Ограничение прямого подключения зависит от размера вычислительных ресурсов. Например, вычислительный блок с 8 CU поддерживает 1678 прямых подключений, а блок с 16 CU поддерживает 3357. Полный список см. в спецификациях вычислений.
Ограничение на подключение клиента 10 000 не означает 10 000 одновременных результатов запроса. Это максимальное количество клиентских подключений, которые принимает PgBouncer. Число параллельных активных транзакций ограничивается размером пула, который составляет около 90% max_connections.
Включение пула подключений
Необходимые условия
- Проект автомасштабирования Lakebase должен быть активным.
- В проекте должна быть встроенная роль с паролем в Postgres. Инструкции см. в статье "Создание собственной роли пароля Postgres".
- Чтобы использовать пул подключений с вычислительными экземплярами только для чтения, необходимо иметь конечную точку высокой доступности с включенным параметром Разрешить доступ к вычислительным экземплярам только для чтения. См. раздел "Высокий уровень доступности".
Шаги
- В приложении Lakebase перейдите к проекту и нажмите кнопку "Подключить".
- Выберите ветвь и вычислительные ресурсы, к которым вы хотите подключиться.
- В раскрывающемся списке "Роль" выберите собственную роль пароля Postgres. Параметр пула подключений отображается только при выборе роли пароля. Он скрыт для ролей OAuth.
- Включите пул подключений.
- Скопируйте строка подключения и используйте его в приложении.
Форматы строк подключения
В строках подключения через пулер используется другое имя хоста, чем при прямом подключении к базе данных. Имя узла содержит -pooler после идентификатора конечной точки для вычислительного ресурса с доступом на чтение и запись или -ro-pooler для вычислительного ресурса с доступом только для чтения:
| Тип вычислений | Формат имени узла | Когда следует использовать |
|---|---|---|
| Вычислительный ресурс с возможностью чтения и записи | <endpoint-id>-pooler.<region>.<cloud>.databricks.com |
Весь трафик записи и чтения |
| Вычислительные ресурсы только для чтения | <endpoint-id>-ro-pooler.<region>.<cloud>.databricks.com |
Только чтение трафика. Требуется конечная точка высокого уровня доступности с включенным доступом на чтение. |
Оба используют порт 5432.
Замечание
Скопируйте строку подключения пула непосредственно из диалогового окна Connect в приложении Lakebase, для получения корректного имени хоста для конечной точки, региона и облака.
Конфигурация PgBouncer
Lakebase управляет PgBouncer следующими параметрами. Эти параметры исправлены и не могут быть настроены.
[pgbouncer]
pool_mode=transaction
max_client_conn=10000
default_pool_size=0.9 * max_connections
max_prepared_statements=1000
query_wait_timeout=120
| Setting | Description |
|---|---|
pool_mode=transaction |
Подключения к серверу возвращаются в пул после каждой транзакции. См. режим транзакции. |
max_client_conn=10000 |
Максимальное число одновременных клиентских подключений PgBouncer принимает. |
default_pool_size=0.9 * max_connections |
Активные подключения к серверу на пару (пользователь, база данных). Зависит от размера вычислительных ресурсов. |
max_prepared_statements=1000 |
Разрешает подготовленные инструкции уровня протокола в режиме транзакции. Ограничивает количество отслеживаемых инструкций до 1 000 для каждого клиентского подключения. |
query_wait_timeout=120 |
Количество секунд, в течение которых клиент ожидает соединения с сервером до возникновения ошибки тайм-аута. |
Режим транзакции
Режим транзакций повышает эффективность подключения, но ограничивает некоторые функции Postgres, требующие постоянного подключения к серверу. Следующие функции недоступны при использовании пула подключений:
Подготовленные инструкции на уровне SQL:
PREPAREиDEALLOCATEинструкции не поддерживаются в режиме транзакций. Подготовленные выражения уровня драйвера (используемые внутри psycopg, node-postgres, JDBC и подобных библиотек) корректно работают благодаря поддержке PgBouncer на уровне протокола. Для JDBC, если вы видите ошибки, связанные с подготовленными запросами, установитеprepareThreshold=0для отключения кэширования подготовленных запросов на стороне сервера.Параметры уровня сеанса:
SETкоманды не сохраняются в транзакциях, так как каждая транзакция может использовать другое подключение к серверу. Рассмотрим пример.BEGIN; SET search_path TO myschema; SELECT * FROM mytable; -- works in this transaction COMMIT; -- connection returns to pool after COMMIT SELECT * FROM mytable; -- ERROR: relation "mytable" does not existЧтобы применить параметр безвозвратно, используйте
ALTER ROLE:ALTER ROLE myrole SET search_path TO myschema, public;Временные таблицы, удерживаемые сеансами: временные таблицы, сохраняющиеся в транзакциях, недоступны. Подключение, возвращаемое к пулу, в следующей транзакции может быть назначено другому клиенту.
WITH HOLDкурсоры: курсоры, объявленные сWITH HOLD, требуют постоянного подключения и не поддерживаются.Блокировки рекомендаций: PgBouncer не поддерживает блокировки рекомендаций. Для блокировки рекомендаций требуется постоянное подключение к серверу, которое недоступно в режиме транзакций.
LISTEN/NOTIFY: не поддерживается. Используйте прямое (последовательное) подключение для приложений, которым требуется обмен сообщениями по схеме публикация/подписка.pg_dumpи миграция схем: используйте прямое соединение дляpg_dump, миграции схем и других инструментов, которые полагаются на состояние уровня сеанса.
Замечание
Для приложений, которым требуются функции Postgres на уровне сеанса, используйте прямую строку подключения из диалогового окна Connect, не включая переключатель Connection pooling.