Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Гибкие экземпляры сервера базы данных Azure для PostgreSQL предлагают PgBouncer как встроенное решение для пула подключений. PgBouncer — это необязательная функция, которую можно включить на каждом сервере базы данных. Она поддерживается на уровнях вычислений общего назначения и оптимизированных для памяти вычислительных ресурсов как в общедоступных, так и в частных сетях доступа.
PgBouncer выполняется на той же виртуальной машине, что и сервер базы данных для экземпляра сервера Azure Database for PostgreSQL Flexible Server. Postgres использует модель на основе процессов для подключений, поэтому поддержание большого количества бездействующих подключений является дорогостоящим. Postgres сталкивается с ограничениями ресурсов, когда сервер обрабатывает более нескольких тысяч подключений. Расширение PgBouncer призвано повысить эффективность обработки бездействующих и кратковременных подключений на сервере базы данных.
PgBouncer использует упрощенную модель, которая использует асинхронный ввод-вывод. Он использует подключения Postgres только в случае необходимости, то есть, когда внутри открытой транзакции или когда запрос активен. Эта модель позволяет масштабировать до 10 000 подключений с низкими затратами.
Версия PgBouncer, развернутая на всех поддерживаемых основных версиях ядра в Базе данных Azure для PostgreSQL, — 1.25.1. PgBouncer выполняется через порт 6432 на сервере базы данных. Вы можете изменить конфигурацию подключения к базе данных приложения, чтобы использовать то же имя узла, но изменить порт на 6432, чтобы начать использовать PgBouncer и воспользоваться улучшенным масштабированием бездействующих подключений.
PgBouncer в Базе данных Azure для PostgreSQL поддерживает проверку подлинности Microsoft Entra (Azure AD).
Включение и настройка PgBouncer
PgBouncer особенно полезен в транзакционных приложениях, где частый поток подключений может снизить производительность. Он включен по умолчанию в порте 6432, и его можно подключить с помощью того же имени узла, что и сервер PostgreSQL, но с портом 6432 вместо порта по умолчанию 5432.
Чтобы включить PgBouncer, перейдите в область параметров сервера в портал Azure, найдите PgBouncer и измените параметр pgbouncer.enabledна true . Не нужно перезапустить сервер.
Параметры PgBouncer можно настроить с помощью этих параметров.
Замечание
Следующий список параметров сервера PgBouncer отображается на панели параметров сервера, только если pgbouncer.enabled для параметра сервера задано trueзначение . В противном случае они намеренно скрыты.
| Имя параметра | Description | По умолчанию |
|---|---|---|
pgbouncer.default_pool_size |
Задайте для этого параметра число подключений для каждой пары пользователей и базы данных. | 50 |
pgbouncer.ignore_startup_parameters |
Введите разделенный запятыми список параметров, которые PgBouncer может игнорировать. Например, можно разрешить PgBouncer игнорировать extra_float_digits параметр. Некоторые параметры разрешены; все остальные вызывают ошибку. Эта функциональность необходима для того, чтобы управлять чрезмерно активным подключением к базе данных Java (JDBC), требующим безусловного задания extra_float_digits=2 в пакетах запуска. Используйте этот параметр, если библиотека, которую вы используете, сообщает об ошибках, таких как pq: unsupported startup parameter: extra_float_digits. |
|
pgbouncer.max_client_conn |
Задайте для этого параметра максимальное количество клиентских подключений к PgBouncer, которое требуется поддерживать. Значение по умолчанию — 5000, с допустимым диапазоном от 1 до 50 000. | 5000 |
pgbouncer.max_prepared_statements |
Если это значение ненулевое, PgBouncer отслеживает именованные инструкции, связанные с инструкциями, связанными с протоколом, которые клиент отправляет в режиме пула транзакций и инструкций. | 0 |
pgbouncer.min_pool_size |
Добавьте дополнительные серверные подключения к пулу, если число подключений ниже этого значения. | 0 |
pgbouncer.pool_mode |
Задайте для этого параметра значение TRANSACTION, чтобы использовать пул транзакций (рекомендуемый вариант для большинства рабочих нагрузок). | транзакция |
pgbouncer.query_wait_timeout |
Максимальное время в секундах, когда запросы могут тратиться на ожидание выполнения. Если запрос не назначен серверу в течение этого времени, клиент отключается. | 120 |
pgbouncer.server_idle_timeout |
Если подключение к серверу неактивно в течение нескольких секунд, PgBouncer удаляет подключение. Если значение равно 0, время ожидания отключено. | 600 |
pgbouncer.stats_users |
Разделенный запятыми список пользователей базы данных, которым разрешено подключаться и выполнять запросы только для чтения в консоли pgBouncer. |
Дополнительные сведения о конфигурациях PgBouncer см. в документации pgbouncer.ini.
Преимущества
Используя встроенную функцию PgBouncer с гибким экземпляром сервера Базы данных Azure для PostgreSQL, вы получите следующие преимущества:
Удобство упрощенной настройки. Так как PgBouncer интегрирован с гибким экземпляром сервера Базы данных Azure для PostgreSQL, вам не требуется отдельная установка или сложная настройка. Его можно настроить непосредственно из параметров сервера.
Надежность управляемой службы: PgBouncer предлагает преимущества управляемых служб Azure. Например, Azure управляет обновлениями PgBouncer. Автоматическое обновление устраняет необходимость обслуживания вручную и гарантирует, что PgBouncer остается в курсе последних функций и исправлений безопасности.
Поддержка различных типов подключений: PgBouncer в Базе данных Azure для PostgreSQL обеспечивает поддержку общедоступных и частных подключений. Его можно использовать для установления безопасных подключений через частные сети или внешнего подключения в зависимости от ваших требований.
Высокий уровень доступности в сценариях резервирования: если резервный сервер переключен в основную роль во время отказа, PgBouncer бесшовно перезапускается на новом назначенном основном сервере. Вам не нужно вносить изменения в строку подключения приложения. Эта возможность помогает обеспечить непрерывную доступность и свести к минимуму прерывание работы пула подключений приложения.
Мониторинг PgBouncer
Metrics
С помощью метрик PgBouncer можно отслеживать производительность процесса PgBouncer, включая сведения о активных подключениях, бездействии подключений, общих пуловых подключениях и количестве пулов подключений. Каждая метрика испускается с интервалом в 1 минуту и имеет до 93 дней истории. Клиенты могут настраивать оповещения по метрикам, а также получать доступ к новым измерениям метрик для разделения и фильтрации данных метрик по имени базы данных.
Как включить метрики PgBouncer
- Чтобы отслеживать метрики PgBouncer, убедитесь, что функция pgbouncer включена с помощью параметра
pgbouncer.enabledсервера и параметраmetrics.pgbouncer_diagnosticsметрик. - Эти параметры являются динамическими и не требуют перезапуска экземпляра.
- Метрики PgBouncer отключены по умолчанию.
Список метрик PgBouncer
| Показать имя | Идентификатор метрики | Единица | Description | Размерность | Включена по умолчанию |
|---|---|---|---|---|---|
| Активные клиентские подключения | client_connections_active |
Численность | Подключения от клиентов, связанных с подключением к гибкому серверу Azure Database for PostgreSQL. | DatabaseName | нет |
| Ожидание клиентских подключений | client_connections_waiting |
Численность | Подключения от клиентов, ожидающих гибкого подключения к серверу Базы данных Azure для PostgreSQL. | DatabaseName | нет |
| Активные подключения к серверу | server_connections_active |
Численность | Подключения к гибкому серверу базы данных Azure для PostgreSQL, которые используются для клиентского соединения. | DatabaseName | нет |
| Неактивные подключения к серверу | server_connections_idle |
Численность | Подключения к гибкому серверу Базы данных Azure для PostgreSQL, которые неактивны и готовы к обслуживанию нового клиентского подключения. | DatabaseName | нет |
| Общее количество объединённых подключений | total_pooled_connections |
Численность | Текущее количество подключений в пуле. | DatabaseName | нет |
| Количество пулов подключений | num_pools |
Численность | Общее количество пулов подключений. | DatabaseName | нет |
Рекомендации по использованию метрик PgBouncer
- Метрики PgBouncer, использующие измерение DatabaseName, имеют ограничение в 30 баз данных .
- В SKU Burstable ограничение составляет 10 баз данных с измерением DatabaseName.
- Ограничение измерения DatabaseName применяется к столбцу OID, который отражает порядок создания базы данных.
Дополнительные сведения см. в разделе метрики PgBouncer.
Logs
Гибкий сервер Базы данных Azure для PostgreSQL предоставляет журналы PgBouncer для аудита действий пула подключений и устранения неполадок, таких как падение подключений, сбои проверки подлинности или исчерпание пула. Журналы PgBouncer включают такие сведения, как сбои проверки подлинности, события жизненного цикла подключения, ошибки и изменения состояния сервера. Эти сведения полезны для выявления узких мест подключения и аномалий поведения.
Включение журналов
Включите параметры диагностики логов для автоматического вывода логов PgBouncer. Log Analytics поддерживает два типа схемы: диагностику Azure и конкретный ресурс. Дополнительные сведения см. в статье "Общие и специальные схемы для журналов ресурсов Azure".
Схема диагностики Azure
- Логи отображаются в
AzureDiagnosticsтаблице. - Фильтрация с помощью:
Category == "PostgreSQLFlexPGBouncer"
- Логи отображаются в
Специфическая для ресурса схема
- Логи отображаются в
PGSQLPgBouncerтаблице. - Более простой для запросов, структурированный формат.
- Логи отображаются в
Примеры запросов KQL
Схема диагностики Azure:
AzureDiagnostics
| where Category == "PostgreSQLFlexPGBouncer"
| where LogicalServerName_s =~ "your-server-name"
| order by TimeGenerated desc
Специфическая для ресурса схема:
PGSQLPgBouncer
| where _ResourceId =~ "your-server-name"
| order by TimeGenerated desc
Замечание
Имена полей и формат схемы могут немного отличаться в зависимости от используемой схемы (консолидированная и Resource-Specific).
Консоль администрирования
PgBouncer также предоставляет внутреннюю базу данных с именем pgbouncer. При подключении к этой базе данных можно выполнять SHOW команды, предоставляющие сведения о текущем состоянии PgBouncer.
Чтобы подключиться к pgbouncer базе данных, выполните следующие действия.
pgBouncer.stats_usersЗадайте параметру имя существующего пользователя (например,myUser) и примените изменения.Подключитесь к
pgbouncerбазе данных в качестве этого пользователя и задайте порт следующим образом6432:psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=pgbouncer user=myUser password=<password> sslmode=require"
После подключения к базе данных используйте SHOW команды для просмотра статистики PgBouncer:
-
SHOW HELP: Перечислите доступные командыSHOW. -
SHOW POOLS: Покажите количество соединений в каждом статусе для каждого пула. -
SHOW DATABASES: отображение текущих примененных ограничений подключения для каждой базы данных. -
SHOW STATS: отображение статистики по запросам и трафику для каждой базы данных.
Для получения дополнительной информации о командах PgBouncer SHOW см. консоль администратора.
Переключение приложения на использование PgBouncer
Чтобы начать работу с PgBouncer, выполните следующие действия:
Подключитесь к серверу базы данных, но вместо обычного порта 5432 используйте порт 6432. Убедитесь, что это подключение работает.
psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=<password> sslmode=require"Протестируйте приложение в среде качества обслуживания с помощью PgBouncer, чтобы убедиться, что у вас нет проблем совместимости. Проект PgBouncer предоставляет матрицу совместимости и рекомендуется использовать пул транзакций для большинства пользователей.
Измените рабочее приложение, чтобы подключиться к порту 6432 вместо 5432. Отслеживайте любые ошибки на стороне приложения, которые могут указывать на проблемы совместимости.
PgBouncer в зоне с резервированием на случай выхода из строя для высокой доступности
На зонально избыточных серверах высокой доступности (HA) основной сервер запускает PgBouncer. Вы можете подключиться к PgBouncer на основном сервере через порт 6432. После переключения на резервный сервер система перезагрузит PgBouncer на вновь повышенном резервном сервере, который теперь является основным сервером. Таким образом, строка подключения вашего приложения остается неизменной после переключения на резервный сервер.
PgBouncer с эластичными кластерами
PgBouncer также доступен для эластичных кластеров. Каждый узел в эластичном кластере имеет собственный экземпляр PgBouncer. После того как вы его включите, порт 6432 направляется к PgBouncer на узле координатора эластичного кластера. Кроме того, порт 8432 направляется к экземплярам PgBouncer, работающим на рабочих узлах кластера.
Ограничения
- Функция PgBouncer в настоящее время не поддерживает уровень вычислительных ресурсов Burstable. При изменении уровня вычислительных ресурсов с общего назначения или оптимизированного под память на гибкий уровень производительности вы потеряете встроенные возможности PgBouncer.
- При перезапуске сервера во время операций масштабирования, отказоустойчивого переключения или перезапуска система также перезапускает PgBouncer и виртуальную машину. Затем необходимо повторно установить существующие подключения.
- На портале не отображаются все параметры PgBouncer. После включения PgBouncer и сохранения параметров необходимо закрыть область параметров сервера (например, " Обзор") и вернуться к области параметров сервера , чтобы просмотреть все параметры.
- Не удается использовать режимы пула инструкций вместе с подготовленными инструкциями. Текущая версия PgBouncer добавляет поддержку подготовленных инструкций в режиме транзакции. Эту поддержку можно включить и настроить с помощью параметра max_prepared_statements. Установка этого параметра над значением по умолчанию 0 включает поддержку подготовленных инструкций. Эта поддержка только для подготовленных выражений уровня протокола. Для большинства языков программирования это поддержка означает, что приложение использует функцию libpqPQprepare на клиенте, отправляя команды уровня протокола, которые PgBouncer может перехватывать, а не выдавать динамическую команду SQL, аналогичную PREPARE proc AS, которая отправляет текст, который PgBouncer не будет интерпретировать правильно. Чтобы проверить другие ограничения выбранного режима пула, ознакомьтесь с документацией по PgBouncer.
- При развертывании PgBouncer в качестве функции он становится потенциальной точкой сбоя. Если функция PgBouncer отключена, это может нарушить весь пул подключений к базе данных и привести к простоям приложения. Чтобы устранить одну точку сбоя, можно настроить несколько экземпляров PgBouncer за подсистемой балансировки нагрузки для обеспечения высокой доступности на виртуальных машинах Azure.
- PgBouncer — это упрощенное приложение, использующее однопоточную архитектуру. Эта конструкция отлично подходит для большинства рабочих нагрузок приложений. Но в приложениях, создающих большое количество коротких подключений, эта конструкция может повлиять на производительность PgBouncer и ограничить возможность масштабирования приложения. Возможно, вам потребуется попробовать один из следующих подходов:
- Распределение нагрузки подключения между несколькими экземплярами PgBouncer на виртуальных машинах Azure.
- Рассмотрим альтернативные решения, включая многопоточные решения, такие как PgCat, на виртуальных машинах Azure.
Это важно
Параметр pgbouncer.client_tls_sslmode встроенной функции PgBouncer не рекомендуется использовать в Базе данных Azure для PostgreSQL.
При принудительном применении TLS/SSL для подключений к гибкому экземпляру базы данных Azure для PostgreSQL путем установки параметра require_secure_transportON сервера, TLS/SSL автоматически применяется для подключений к встроенной функции PgBouncer. Этот параметр включен по умолчанию при создании нового База данных Azure для PostgreSQL гибкого экземпляра сервера и включения встроенной функции PgBouncer. Дополнительные сведения см. в статье "Безопасное подключение с помощью TLS" в Базе данных Azure для PostgreSQL.
Для клиентов, которым требуется упрощенное управление, встроенная высокая доступность, простое подключение к контейнерным приложениям и возможность использовать самые популярные параметры конфигурации, встроенная функция PgBouncer является хорошим выбором. Для клиентов, которым требуется многопоточное масштабируемость, полный контроль всех параметров и возможности отладки, настройка PgBouncer на виртуальных машинах Azure может быть альтернативой.