Поделиться через


Слияние секций в Azure Cosmos DB (предварительная версия)

Область применения: NoSQL MongoDB

Объединение секций в Azure Cosmos DB (предварительная версия) позволяет уменьшить количество физических секций, используемых для контейнера. С помощью слияния можно переработать физические разделы контейнеров, фрагментированных по пропускной способности (с низким числом RU/s на раздел) или хранению (с малым объемом хранилища на раздел). Если пропускная способность контейнера была увеличена и необходимо ее уменьшить, слияние может помочь устранить проблемы с фрагментацией пропускной способности. При неизменном объеме подготовленных единиц запросов в секунду (ЕЗ/с) уменьшение количества физических секций означает, что каждая физическая секция получит больше ЕС/з о общего числа. Сокращение количества секций снижает вероятность ограничения скорости, если из контейнера удаляется большое количество данных, а ЕЗ/с на секцию мало. Слияние может помочь очистить неиспользуемые или пустые секции, эффективно устраняя проблемы с фрагментацией хранилища.

Начало работы

Чтобы приступить к слиянию секций, перейдите на страницу "Компоненты " в учетной записи Azure Cosmos DB. Выберите и включите функцию слияния секций (предварительная версия).

Прежде чем включить эту функцию, убедитесь, что учетные записи Azure Cosmos DB соответствуют всем критериям доступности предварительной версии. После включения функции 15–20 минут в силу.

Внимание

Если слияние включено в учетной записи, только запросы из пакета SDK >для .NET = 3.27.0 или пакет SDK >Java = 4.42.0 или соединитель >Spark для Azure Cosmos DB = 4.18.0 или пакет SDK >JavaScript = 4.3 будут разрешены в учетной записи, независимо от того, выполняются ли слияния или нет. Запросы из других пакетов SDK (старый пакет SDK для .NET, старый пакет SDK Java, старый пакет SDK JavaScript, любой пакет SDK для Python, любой пакет SDK Go) или неподдерживаемые соединители (фабрика данных Azure, поиск Azure и расширение <Функций Azure = 3.x) будут заблокированы и завершаются сбоем. Перед включением функции убедитесь, что вы обновили пакет SDK до поддерживаемой версии. После включения или отключения функции может потребоваться 15–20 минут для полного распространения в учетную запись. Если вы планируете отключить эту функцию после завершения работы с ней, может потребоваться 15–20 минут, прежде чем будут разрешены запросы от пакетов SDK и соединителей, которые не поддерживаются для слияния.

Снимок экрана: область компонентов и функция слияния секций.

Чтобы проверить, подходит ли учетная запись Azure Cosmos DB для использования предварительной версии, вы можете использовать встроенную проверку соответствия требованиям на портале Azure. На странице обзора учетной записи Azure Cosmos DB на портале Azure выберите Диагностика и решение проблем ->Пропускная способность и масштабирование ->Объединение секций. Выполните диагностическое средство Проверка права на предварительный просмотр объединения разделов.

Снимок экрана: содержимое пропускной способности и масштабирования на странице диагностики и решения проблем.

Снимок экрана проверки соответствия требованиям для объединения с таблицей всех критериев соответствия предварительной версии.

Как определить контейнеры для слияния

Контейнеры, удовлетворяющие обоим этим условиям, могут воспользоваться преимуществами объединения секций:

  • Условие 1. Текущий ЕЗ/с для каждой физической секции составляет <3000 ЕЗ/с
  • Условие 2. Текущее среднее хранилище в ГБ на физическую секцию составляет <20 ГБ

Условие 1 часто возникает, когда вы ранее увеличивали мощность ЕЗ/с (часто для приема данных), а теперь хотите уменьшить производительность в стабильном состоянии. Условие 2 часто возникает при удалении или истечении срока действия большого объема данных, когда остаются неиспользуемые разделы.

Условие 1

Чтобы определить текущее значение RU/с для каждого физического раздела, в аккаунте Cosmos перейдите к разделу Метрики. Выберите метрику Пропускная способность физической секции и примените фильтр для своей базы данных и контейнера. Применение разделения по PhysicalPartitionId.

Для контейнеров, использующих автомасштабирование, эта метрика показывает максимальное количество единиц запросов в секунду (RU/s), в данный момент выделенных для каждого физического раздела. Для контейнеров, использующих ручную пропускную способность, эта метрика отображает ручное RU/s для каждой физической секции.

В примере ниже представлен контейнер с автоматическим масштабированием, подготовленный для 5000 ЕЗ/с (масштабируется от 500 до 5000 ЕЗ/с). Он имеет пять физических разделов, и каждый физический раздел имеет 1000 RU/с.

Снимок экрана метрики пропускной способности физического раздела в Azure Monitor на портале Azure.

Условие 2

Чтобы определить текущий средний объем хранилища на физическую секцию, сначала найдите общий объем хранилища (данные + индекс) в контейнере.

Перейдите в Аналитики>Хранилище>Использование данных и индексов. Общий объем хранилища — это сумма использования данных и индекса. В приведенном ниже примере контейнер имеет в общей сложности 74 ГБ.

Снимок экрана: метрика Azure Monitor для объема хранилища (данные плюс индекс) для контейнера на портале Azure.

Затем найдите общее количество физических разделов. Эта метрика — это уникальное число PhysicalPartitionIds на диаграмме PhysicalPartitionThroughput , которая была представлена в условии 1. В нашем примере у нас есть пять физических разделов.

Наконец, разделите общий объем хранилища в ГБ на количество физических секций. В нашем примере в среднем (74 ГБ / пять физических секций) = 14,8 ГБ на физическую секцию.

В соответствии с условиями 1 и 2 наш контейнер потенциально может извлечь выгоду из объединения разделов.

Слияние физических секций

В PowerShell при передаче флага -WhatIf Azure Cosmos DB запускает имитацию и возвращает ожидаемый результат слияния. Этот результат возвращается, несмотря на то, что само слияние не происходит. Если флаг не передан, слияние выполняется по отношению к ресурсу. По завершении команда выводит текущий объём хранилища в килобайтах для каждого физического раздела после выполнения слияния.

Совет

Прежде чем выполнять слияние, рекомендуется задать подготовленные ЕЗ/с (значение, устанавливаемое вручную, или автомасштабирование максимального числа ЕЗ/с) как можно ближе к требуемому стабильному числу ЕЗ/с после слияния, чтобы система вычислила эффективную конфигурацию секций.

Используется Install-Module для установки модуля Az.CosmosDB с включенными функциями предварительной версии.

$parameters = @{
    Name = "Az.CosmosDB"
    AllowPrerelease = $true
    Force = $true
}
Install-Module @parameters

Для подготовленных контейнеров пропускной способности используйте Invoke-AzCosmosDBSqlContainerMerge параметр -WhatIf для предварительного просмотра слияния без фактического выполнения операции.

$parameters = @{
    ResourceGroupName = "<resource-group-name>"
    AccountName = "<cosmos-account-name>"
    DatabaseName = "<cosmos-database-name>"
    Name = "<cosmos-container-name>"
    WhatIf = $true
}
Invoke-AzCosmosDBSqlContainerMerge @parameters

Запустите слияние, выполнив ту же команду без -WhatIf параметра.

$parameters = @{
    ResourceGroupName = "<resource-group-name>"
    AccountName = "<cosmos-account-name>"
    DatabaseName = "<cosmos-database-name>"
    Name = "<cosmos-container-name>"
}
Invoke-AzCosmosDBSqlContainerMerge @parameters

Для баз данных с общей пропускной способностью запустите слияние с помощью az cosmosdb mongodb database merge.

az cosmosdb mongodb database merge \
	--account-name '<cosmos-account-name>'                               
	--name '<cosmos-database-name>'                                
	--resource-group '<resource-group-name>'

Мониторинг операций объединения

Объединение секций — это длительная операция, и SLA не определяет, сколько времени она займет. Время зависит от объема данных в контейнере и количества физических секций. Для завершения объединения рекомендуется подождать не менее 5–6 часов.

Хотя слияние секций выполняется в контейнере, при изменении параметров контейнера (TTL, политики индексирования, уникальных ключей и т. д.), текущая операция слияния будет отменена. Если вы увеличиваете ЕЗ/с во время выполнения слияния, текущая операция слияния будет отменена, и ваш контейнер будет обновлен с новым значением. В зависимости от запрошенной единицы запросов масштаб может быть мгновенным или занять больше времени. Если вы уменьшите кол-во RU/c во время выполнения слияния, значение RU/c будет мгновенно обновлено до нового значения. Процесс слияния продолжается с тем же числом целевых разделов, основанном на установленном значении RU/с на момент активации слияния. Рекомендуется ждать завершения операции слияния перед изменением параметров контейнера или пропускной способности.

Вы можете отслеживать, выполняется ли объединение, проверяя раздел Журнал действий и фильтруя события Объединение физических секций коллекции MongoDB или Объединение физических секций контейнера SQL.

Ограничения

Ниже приведены ограничения функции слияния в настоящее время.

Условия соответствия для получения предварительной версии

Чтобы зарегистрировать в предварительной версии, учетная запись Azure Cosmos DB должна соответствовать всем следующим критериям:

  • Учетная запись Azure Cosmos DB использует API для NoSQL или MongoDB с версией >=3.6.
  • Ваша учетная запись Azure Cosmos DB использует подготовленную пропускную способность (масштабируется вручную или автоматически). Объединение не применяется к бессерверным учетным записям.
  • Ваша учетная запись Azure Cosmos DB — это учетная запись с одной регионом для записи (слияние в настоящее время не поддерживается для учетных записей с несколькими регионами для записи).
  • Учетная запись Azure Cosmos DB не использует следующие функции:
  • Если вы используете API для NoSQL, приложение должно использовать пакет SDK для .NET для Azure Cosmos DB версии 3 (версия 3.27.0 или более поздней версии) или пакет SDK для Java версии 4 (версия 4.42.0 или более поздней версии) ИЛИ пакет SDK JavaScript версии 4 (версия 4.3.0 или более поздней). Если на вашей учетной записи включен предварительный просмотр слияния, учетная запись не принимает запросы, отправленные из не .NET/Java SDK или из более старых версий SDK для .NET/Java.
    • Для использования этой функции с API для MongoDB нет никаких требований к пакетам SDK или драйверам.
  • Учетная запись Azure Cosmos DB в настоящее время не использует неподдерживаемые соединители:
    • Фабрика данных Azure
    • расширение Функции Azure = 3.x (поддерживается расширение <Функции Azure 4.0 и выше)
    • Соединитель < Spark для Azure Cosmos DB 4.18.0
    • Любая сторонняя библиотека или средство, которое имеет зависимость от пакета SDK Azure Cosmos DB, который не является пакетом SDK для .NET версии 3 = 3.27.0 или пакет SDK >java версии 4 = 4.42.0 или пакет SDK >JavaScript версии 4 >= 4.3.0

Ресурсы и конфигурация учетной записи

  • Слияние доступно только через API для учетных записей NoSQL и MongoDB. Для API для учетных записей MongoDB нужно использовать учетную запись MongoDB версии 3.6 или более новой.
  • Слияние доступно только для учетных записей с записью в одном регионе. Учетные записи с записью в нескольких регионах не поддерживаются.
  • Учетные записи, использующие функции слияния, также не могут использовать эти функции (если эти функции добавляются в учетную запись с поддержкой слияния, учетная запись не может объединять ресурсы):
  • После объединения контейнера невозможно будет прочитать поток изменений с указанием начального времени. Поддержка этой функции планируется реализовать в будущем.

Требования к пакету SDK (только API для NoSQL)

Учетные записи с включенной функцией слияния поддерживаются только при использовании последней версии пакета SDK для .NET версии 3 или пакета SDK для Java версии 4. Если функция включена в учетной записи (независимо от того, выполняется ли слияние), с ней необходимо использовать только поддерживаемый пакет SDK. Запросы, отправленные из других пакетов SDK или более ранних версий, не принимаются. Если вы используете поддерживаемый пакет SDK, приложение может продолжать работать во время слияния.

Найдите последнюю версию поддерживаемого пакета SDK:

Пакет SDK Поддерживаемые версии Ссылка для диспетчера пакетов
Пакет SDK версии 3 для .NET >= 3.27.0 https://www.nuget.org/packages/Microsoft.Azure.Cosmos
Пакет SDK для Java версии 4 >= 4.42.0 https://mvnrepository.com/artifact/com.azure/azure-cosmos

Поддержка других пакетов SDK планируется в будущем.

Совет

Перед регистрацией в предварительной версии убедитесь, что приложение обновлено для использования совместимой версии пакета SDK. Если вы используете устаревший пакет SDK, следуйте соответствующему руководству по миграции:

Неподдерживаемые соединители

При регистрации в предварительной версии следующие соединители выходят из строя.

  • Фабрика данных Azure ¹
  • расширение Функции Azure = 3.x (поддерживается расширение <Функции Azure 4.0 и выше) ¹
  • Соединитель < Spark для Azure Cosmos DB 4.18.0
  • Любая сторонняя библиотека или средство, которое имеет зависимость от пакета SDK Azure Cosmos DB, который не является пакетом SDK для .NET версии 3 = 3.27.0 или пакет SDK >>для Java версии 4 = 4.42.0

Поддержка этих соединителей планируется в будущем.

Следующие шаги