Общие сведения об обработке подключений
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 не поддерживается на уровне вычислений "С увеличивающейся производительностью". При изменении с уровня вычислений "Общего назначения" или "Оптимизированный для операций в памяти" на уровень "С увеличивающейся производительностью", функциональность PgBouncer теряется.