Общие сведения о базе данных Azure для PostgreSQL

Завершено

База данных Azure для PostgreSQL доступна в многосерверных версиях.

Как разработчик баз данных с многолетним опытом по запуску локальных установок PostgreSQL и управлению ими, вы хотите понять, каким образом Базы данных Azure для PostgreSQL поддерживают и масштабируют свои функции.

На этом занятии вы ознакомитесь с ценами, узнаете о поддержке версий, изучите процесс репликации и рассмотрите варианты масштабирования для Базы данных Azure для PostgreSQL.

База данных Azure для PostgreSQL

База данных Azure для PostgreSQL является реализацией версии PostgreSQL для сообщества. Служба предоставляет распространенные функции, используемые стандартными системами PostgreSQL, включая геопространственную поддержку и полнотекстовый поиск.

Корпорация Майкрософт адаптировала PostgreSQL для платформы Azure, и теперь эта служба тесно интегрирована со многими службами Azure. База данных Azure для PostgreSQL полностью управляется корпорацией Майкрософт. Корпорация Майкрософт выпускает обновления и исправления для программного обеспечения и поддерживает соглашение об уровне обслуживания с доступностью на уровне 99,99 % Это означает, что можно просто сконцентрироваться на работе с базами данных и приложениями, использующими эту службу.

На каждом экземпляре этой службы можно развернуть несколько баз данных.

Ценовые категории

При создании экземпляра Базы данных Azure для PostgreSQL нужно указать вычислительные ресурсы и ресурсы хранилища, которые необходимо выделить. Для этого следует выбрать ценовую категорию. Ценовые категории различаются количеством ядер виртуальных процессоров, доступным объемом хранилища и вариантами резервного копирования. Чем больше ресурсов вы выделяете, тем выше стоимость.

База данных Azure для PostgreSQL использует хранилище для хранения файлов базы данных, временных файлов, журналов транзакций и журналов сервера. При приближении к значению текущей емкости можно указать необходимость увеличения объема доступного хранилища. Если этот параметр не выбран, серверы, работающие вне хранилища, продолжат работу, но в режиме только для чтения.

Ценовые категории сгруппированы на портале Azure в три широких диапазона:

  • Базовый — подходит для небольших систем и сред разработки, но имеет переменную производительность операций ввода-вывода.
  • Общего назначения — обеспечивает прогнозируемую производительность (до 6000 операций ввода-вывода в секунду) в зависимости от количества ядер процессора и доступного места на диске.
  • Оптимизированная для операций в памяти — использует до 32 ядер виртуальных процессоров, оптимизированных для операций в памяти, а также обеспечивает предсказуемую производительность до 6000 операций ввода-вывода в секунду.

Корпорация Майкрософт также выпустила предварительную версию категории Крупное хранилище, позволяющую подготавливать до 16 ТБ хранилища и поддерживать до 20 000 операций ввода-вывода в секунду.

Вы можете точно указать требуемое количество ядер процессора и объем хранилища. Масштаб ресурсов обработки можно вертикально увеличивать и уменьшать, при этом объем хранилища можно только увеличивать. Кроме того, после создания баз данных при необходимости можно переключаться между ценовыми категориями "Общего назначения" и "Оптимизированная для операций в памяти". Вы платите только за то, что вам требуется.

Image showing the pricing tiers in the Azure portal

Примечание.

При изменении числа ядер процессора в Azure создается новый сервер с этим распределением вычислительных ресурсов. Во время работы сервера клиентские подключения переключаются на новый сервер. Это может занять не более минуты. В течение этого интервала не допускается установка новых подключений, а для всех запущенных транзакций будет выполнен откат.

Если изменяется только размер хранилища в параметрах резервного копирования, работа службы не нарушается.

Максимальное количество одновременных подключений, которые будет поддерживать служба, определяется ценовой категорией и выделенными ресурсами обработки. Например, если выбрать ценовую категорию "Общего назначения" и выделить 64 виртуальных ядра, служба будет поддерживать 1900 одновременных подключений. Ценовая категория "Базовый" с двумя виртуальными ядрами обрабатывает до 100 одновременных подключений. Для мониторинга сервера самой службе Azure необходимо пять таких подключений. При превышении количества доступных подключений клиенты получат ошибку Неустранимая ошибка: слишком много клиентов.

Цены могут изменяться. Актуальные сведения см. на странице цен на Базу данных Azure для PostgreSQL.

Параметры сервера

В локальной установке PostgreSQL параметры конфигурации сервера задаются в файле postgresql.conf. Используйте Базу данных Azure для PostgreSQL, чтобы изменить параметры конфигурации на странице Параметры сервера. Не все параметры локальной установки PostgreSQL имеют отношение к Базе данных Azure для PostgreSQL, поэтому на странице "Параметры сервера" приводятся только те параметры, которые подходят для Azure.

Image showing the Server parameters page in the Azure portal

Изменения параметров, помеченных как Динамический, вступают в силу немедленно. Для статических параметров требуется перезапуск сервера. Перезапустите сервер с помощью кнопки Перезапустить на странице Обзор на портале.

Image showing the Overview page in the Azure portal with the Restart button highlighted

Высокая доступность

База данных Azure для PostgreSQL — это служба высокой доступности. Она содержит встроенные механизмы обнаружения ошибок и отработки отказа. Если обрабатывающий узел зависает из-за проблемы с оборудованием или программным обеспечением, для его замены будет активирован новый узел. Все подключения, которые в данный момент используют этот узел, будут удалены, но автоматически откроются на новом узле. Будет выполнен откат всех транзакций, запущенных на нерабочем узле. Поэтому всегда следует настраивать клиенты так, чтобы они могли обнаруживать неудачные операции и повторять попытку их выполнения.

Поддерживаемые версии PostgreSQL

Сейчас База данных Azure для PostgreSQL поддерживает PostgreSQL версии 11 (поддержка версии 9.5 прекращена). Используемая версия PostgreSQL указывается при создании экземпляра службы. Корпорация Майкрософт стремится обновить службу в качестве новых версий PostgreSQL и будет поддерживать совместимость с предыдущими двумя основными версиями.

Azure автоматически управляет обновлениями баз данных, выпускаемыми между дополнительными (не основными) версиями PostgreSQL. Например, если у вас есть база данных, использующая PostgreSQL версии 10, Azure может автоматически обновить базу данных до версии 10.1. Чтобы перейти на версию 11, необходимо экспортировать данные из баз данных в текущем экземпляре службы, создать новый экземпляр службы "База данных Azure для PostgreSQL" и импортировать данные в этот новый экземпляр.

Узел-координатор и рабочие узлы

Данные сегментируются и распределяются между рабочими узлами. Обработчик запросов в координаторе может параллелизовать выполнение сложных запросов, направляя обработку на соответствующие рабочие узлы. Рабочие узлы выбираются в соответствии с сегментами, в которых хранятся обрабатываемые данные. Координатор собирает результаты с рабочих узлов, накапливает их и затем отправляет обратно на клиент. Более простые запросы могут выполняться с использованием только одного рабочего узла. Клиенты также подключаются к координатору и никогда не взаимодействуют с рабочим узлом напрямую.

При необходимости можно масштабировать количество рабочих узлов в службе.

Распределение данных

Распределение данных между рабочими узлами осуществляется путем создания распределенных таблиц. Распределенная таблица разделяется на сегменты, и каждый сегмент выделяется для хранилища на рабочем узле. Способ разделения данных определяется указанием столбца в качестве столбца распределения. Данные сегментируются на основе значений данных в этом столбце. При проектировании распределенной таблицы важно внимательно выбирать столбец распределения. Необходимо использовать столбец с большим количеством уникальных значений, которые обычно используются для группировки связанных строк. Например, в таблице для системы электронной коммерции, в которой хранятся сведения о заказах клиентов, идентификатор клиента может быть столбцом обоснованного распределения. Все заказы для данного клиента будут храниться в одном сегменте, но заказы для всех клиентов будут распределены по сегментам.

Можно также создать ссылочные таблицы. Эти таблицы содержат уточняющие данные, например названия городов или коды состояний. Ссылочная таблица полностью реплицируется на каждый рабочий узел. Данные в ссылочной таблице должны быть относительно статическими. После каждого изменения требуется обновлять каждую копию таблицы.

Наконец, можно создать локальные таблицы. Локальная таблица не сегментирована, но хранится в узле координатора. Локальные таблицы можно использовать для хранения небольших таблиц с данными, которые вряд ли потребуются для объединений. Примерами являются имена пользователей и их данные для входа.

Репликация данных в База данных Azure для PostgreSQL

Реплики только для чтения удобно использовать для обработки рабочих нагрузок с большим объемом операций чтения. Клиентские подключения можно распределять между репликами, снижая, таким образом, нагрузку на один экземпляр службы. Если клиенты находятся в разных регионах мира, следует использовать репликацию между регионами, чтобы размещать данные ближе к каждому набору клиентов и сокращать задержку.

Можно также применять реплики в составе плана работ на случай аварийного восстановления. Если главный сервер станет недоступным, вы все равно сможете подключиться к реплике.

Примечание.

В случае потери или удаления главного сервера все реплики только для чтения становятся серверами для чтения и записи. Однако эти серверы будут независимыми друг от друга, поэтому любые изменения данных на одном сервере не будут копироваться на остальные серверы.

Создание реплики

Реплика только для чтения содержит копию баз данных, хранящихся на исходном сервере, называемым главным. Создать реплику главного сервера можно с помощью портала Azure или CLI.

Image showing the Replication page for the Azure Database for PostgreSQL service

При создании реплики только для чтения в Azure создается новый экземпляр Базы данных Azure для PostgreSQL, а затем базы данных копируются с главного сервера на новый сервер. Реплика работает в режиме только для чтения. Любая попытка изменить данные завершится ошибкой.

Задержка реплики

Репликация не является синхронной, и для отображения в репликах изменений, внесенных в данные на главном сервере, может потребоваться некоторое время. Клиентские приложения, которые подключаются к репликам, должны соответствовать этому уровню возможной согласованности. Azure Monitor позволяет отслеживать задержку в репликации с помощью метрик Максимальная задержка между и Задержка реплики.

Управление и мониторинг

Для подключения к Базе данных Azure для PostgreSQL в целях мониторинга баз данных и управления ими можно использовать знакомые средства, такие как pgAdmin. Однако некоторые серверные функциональные возможности, такие как выполнение резервного копирования и восстановления сервера, недоступны, так как сервер управляется и обслуживается Майкрософт.

Image showing the pgAdmin tool connected to Azure Database for PostgreSQL

Средства Azure для мониторинга Базы данных Azure для PostgreSQL

Azure предоставляет широкий набор служб, которые используются для наблюдения за производительностью сервера и базы данных, а также для устранения неполадок. Эти службы позволяют просматривать использование выделенных ресурсов Azure в службе PostgreSQL. Эти сведения полезны для определения необходимости масштабирования системы, изменения структуры таблиц и индексов в базах данных, а также для визуализации статистики времени выполнения и других событий. Ниже приведены доступные службы.

  • Azure Monitor. База данных Azure для PostgreSQL предоставляет метрики, позволяющие отслеживать такие показатели, как загрузка ЦП, использование хранилища, скорость ввода-вывода, объем используемой памяти, количество активных подключений и задержка репликации.

    Image showing the Azure Monitor with metrics for Azure Database for PostgreSQL

  • Журналы сервера. В Azure доступны журналы для каждого сервера PostgreSQL. Их можно скачать на портале Azure.

    Image showing the server logs for an instance of the Azure Database for PostgreSQL service

  • Хранилище запросов и анализ производительности запросов. База данных Azure для PostgreSQL записывает сведения о запросах, выполняемых в базах данных на сервере, и сохраняет их в базе данных с именем azure_sys в схеме query_store. Для просмотра этой информации необходимо выполнить запрос к представлению query_store.qs_view. По умолчанию База данных Azure для PostgreSQL не фиксирует сведения о запросах, так как запись приводит к небольшим накладным расходам, но можно включить отслеживание, задав для свойства сервера pg_qs. query_capture_mode значение Все или Основные.

    Image showing the server server parameters page for Azure Database for PostgreSQL

    Кроме того, хранилище запросов можно настроить для сбора сведений о запросах, которые тратят время на ожидание. Запрос может ожидать освобождения блокировки таблицы другим запросом. Кроме того, ожидание может быть связано с выполнением большого числа операций ввода-вывода или нехваткой памяти. Эти сведения отображаются в представлении query_store.runtime_stats_view.

    Чтобы визуализировать эту статистику, а не выполнять инструкции SQL, воспользуйтесь панелью мониторинга "Анализ производительности запросов" на портале Azure:

    Image showing Query Performance Insight

  • Рекомендации по повышению производительности. Служебная программа рекомендаций по производительности, также доступная на портале Azure, проверяет запросы, выполняемые приложениями. Она рассматривает структуры в базе данных и выдает рекомендации по упорядочению данных, а также о необходимости добавления или удаления индексов.

Клиентские подключения

База данных Azure для PostgreSQL защищена брандмауэром. Для доступа к службе и базе данных необходимо добавить правило брандмауэра для диапазонов IP-адресов, с которых подключаются клиенты. Если нужно получать доступ к службе из Azure (например, из приложения, работающего с использованием служб приложений Azure), необходимо также разрешить доступ к службам Azure.

Настройка брандмауэра

Проще всего настроить брандмауэр можно с помощью параметров безопасности подключения для службы на портале Azure. Добавьте правило для каждого диапазона IP-адресов клиента. На этой странице можно также указать принудительное использование SSL-соединений для службы.

Image showing the firewall configuration for Azure Database for PostgreSQL

Чтобы добавить IP-адрес настольного компьютера, щелкните на панели инструментов пункт Добавить IP-адрес клиента.

Если вы настроили реплики только для чтения, для каждой из них необходимо добавить правило брандмауэра, чтобы сделать их доступными для клиентов.

Библиотеки подключений клиента

При написании собственных клиентских приложений необходимо использовать соответствующий драйвер базы данных для подключения к базе данных PostgreSQL. Многие из этих библиотек зависят от языка программирования. Их поддержкой и обслуживанием занимаются независимые сторонние производители. База данных Azure для PostgreSQL поддерживает клиентские библиотеки для Python, PHP, Node.js, Java, Ruby, Go, C# (.NET), ODBC, C и C++.

Логика повторов клиента

Как упоминалось ранее, некоторые события, такие как отработка отказа при восстановлении высокой доступности и масштабирование ресурсов ЦП, могут привести к кратковременной потере подключения. Для всех запущенных транзакций будет выполнен откат. База данных Azure для PostgreSQL автоматически перенаправляет подключенный клиент на рабочий узел, но любые операции, выполняемые клиентом в это время, будут возвращать ошибку. Эту ситуацию следует рассматривать как временное исключение. Код приложения должен быть подготовлен для перехвата этих исключений и выполнения повторных попыток.

Функции PostgreSQL, поддерживаемые в Базе данных Azure для PostgreSQL

База данных Azure для PostgreSQL поддерживает большинство функций, часто используемых базами данных PostgreSQL, но есть некоторые исключения. Если вам нужна неподдерживаемая функция, потребуется переработать базу данных и код приложения, чтобы удалить эту зависимость, либо запустить PostgreSQL на виртуальной машине. В последнем случае вы должны будете взять на себя ответственность обслуживание сервера и управление им.

Поддерживаемые расширения в Базе данных Azure для PostgreSQL

Многие функциональные возможности PostgreSQL инкапсулированы в расширения. Расширения — это пакеты объектов и кода SQL, которые хранятся на сервере. Их можно загрузить в базу данных с помощью команды CREATE EXTENSION. В настоящее время База данных Azure для PostgreSQL предоставляет множество часто используемых расширений для следующих компонентов.

  • Типы данных
  • Функции
  • Полнотекстовый поиск
  • Индексы (bloom, btree_gist, and btree_gin)
  • Язык plpgsql
  • PostGIS
  • Многие функции администрирования

Пакеты dblink и postgres_fdw используются для подключения одного сервера PostgreSQL к другому, что позволяет коду на одном сервере получать доступ к данным, которые хранятся на другом. В Базе данных Azure для PostgreSQL можно подключаться только между серверами, созданными с ее помощью. Невозможно создавать исходящие подключения к серверам PostgreSQL, размещенным в других местах, например в локальной среде или на виртуальной машине.

Примечание.

Список поддерживаемых расширений постоянно пересматривается и может изменяться. Чтобы получить список поддерживаемых расширений, выполните следующий запрос. Обратите внимание, что вы не можете создавать собственные пользовательские расширения и отправлять их в Базу данных Azure для PostgreSQL:

SELECT * FROM pg_available_extensions;

База данных Azure для PostgreSQL включает в себя базу данных TimescaleDB в качестве дополнительного расширения. Эта база данных содержит аналитические функции, ориентированные на время, и другие возможности, поддерживающие рабочие нагрузки временных рядов. Чтобы использовать эту базу данных, выберите параметр TIMESCALEDB в параметре сервера shared_preload_libraries, а затем перезапустите сервер.

Поддержка языков для хранимых процедур и триггеров

Для поддержки языков, отличных от plpgsql, обычно требуется отдельно скомпилировать хранимую процедуру или код триггера и отправить скомпилированную библиотеку на сервер. Это невозможно сделать с Базой данных Azure для PostgreSQL главным образом из-за соображений безопасности. Если ваш код написан на других языках, его необходимо перенести на plpgsql.