Понимание обработки подключений
Postgres использует модель подключения на основе процесса. Установка подключения включает в себя операционную систему и выделение небольшого объема памяти. Каждый SQL-запрос выполняется с помощью текущего подключения.
Состояния подключения
Подключение может находиться в одном из четырех состояний:
- активные — активные подключения, которые в настоящее время выполняют запросы.
- бездействующие — открытые подключения, которые не используются.
- бездействие в транзакции — ожидание соединения, без выполнения какой-либо работы. Используйте pg_stat_activity, чтобы понять, что делает подключение, и как долго оно находится в этом состоянии.
- бездействия в транзакции (прервано) — подключения, которые ранее простоя в транзакций, но теперь прерваны.
Модель подключения на основе процесса делает поддержание большого количества пассивных подключений дорогим.
Максимальное количество подключений
PostgreSQL ограничивает максимальное число одновременных подключений к серверу в любое время с помощью параметра сервера с именем max_connections. В Базе данных Azure для PostgreSQL значение по умолчанию зависит от уровня вычислительных ресурсов. Допустимое значение составляет от 25 до 5000.
Локальная реализация PostgreSQL резервирует некоторые подключения для суперпользования для поддержания целостности базы данных. Это резервирование обычно составляет 15% от значения max_connections.
База данных Azure для PostgreSQL — это управляемое решение, которое автоматически резервирует три подключения для мониторинга гибкого сервера.
Заметка
В Базе данных Azure для PostgreSQL нет параметров сервера для управления superuser_reserved_connections.
Пул подключений
Клиентские приложения, которые часто открывают и закрывают подключения, могут столкнуться с задержкой подключения, что приводит к снижению транзакций в секунду и общей задержке приложений.
База данных Azure для PostgreSQL рекомендует пул подключений вместо частого открытия и закрытия подключений. Пул подключений повторно использует существующие подключения, а не закрывает и воссоздает подключения. Этот процесс уменьшает задержку подключения и позволяет выполнять более высокие транзакции базы данных в секунду для баз данных на сервере.
Пул подключений устанавливает фиксированный набор подключений при запуске сервера, а затем эти подключения сохраняются. Пул подключений также помогает уменьшить фрагментацию памяти, вызванную новыми подключениями, постоянно создаваемыми на сервере.
PGBouncer
— это решение для пула подключений, встроенное в базу данных Azure для PostgreSQL. Чтобы включить pgBouncer, выполните приведенные действия.
- На портале Azure перейдите к серверу Базы данных Azure для PostgreSQL.
- В меню слева выберите параметры сервера.
- В строке поиска найдите PgBouncer.
- Задайте для параметра pgbouncer.enabled значение true, чтобы включить PgBouncer. Для этого параметра не требуется перезапуск сервера.
- Задайте pgbouncer.default_pool_size для количества необходимых подключений для каждой пары пользователей или базы данных. Значение по умолчанию — 50.
- Задайте для параметра pgBouncer.pool_mode значение TRANSACTION.
Заметка
PgBouncer поддерживается на уровнях вычислений общего назначения и оптимизированных для памяти вычислительных ресурсов как в общедоступном доступе, так и в сети частного доступа. PgBouncer не поддерживается на уровне переменных вычислительных ресурсов. При изменении уровня вычислений с общего назначения или оптимизации памяти на Burstable функция PGBouncer становится недоступна.