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

Область применения: Nosql Mongodb

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

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

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

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

Внимание

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

Screenshot of Features pane and Partition merge feature.

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

Screenshot of Throughput and Scaling content in Diagnose and solve issues page.

Screenshot of merge eligibility check with table of all preview eligibility criteria.

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

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

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

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

Условие 1

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

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

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

Screenshot of Azure Monitor metric Physical Partition Throughput in Azure portal.

Условие 2

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

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

Screenshot of Azure Monitor storage (data + index) metric for container in Azure portal.

Затем найдите общее количество физических секций. Эта метрика — это уникальное число 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, политики индексирования, уникальных ключей и т. д.), текущая операция слияния будет отменена. Если вы увеличиваете ЕЗ/с во время выполнения слияния, текущая операция слияния будет отменена, и ваш контейнер будет обновлен с новым значением. В зависимости от запрошенного запроса на единицу запросов масштаб может быть мгновенной или занять больше времени. Если вы уменьшаете ЕЗ/с во время выполнения слияния, ЕЗ/с будут мгновенно обновлены до нового ЕЗ/с. Выполняется слияние с тем же числом целевых секций на основе заданного значения ЕЗ/с во время активации слияния. Рекомендуется ждать завершения операции слияния перед изменением параметров контейнера или пропускной способности.

Вы можете отслеживать, выполняется ли объединение, проверяя раздел Журнал действий и фильтруя события Объединение физических секций коллекции 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 для .NET/Java или более старых версий пакета SDK для .NET/Java.
    • Для использования этой функции с API для MongoDB нет никаких требований к пакетам SDK или драйверам.
  • Учетная запись Azure Cosmos DB в настоящее время не использует неподдерживаемые соединители:
    • Фабрика данных Azure
    • Azure Stream Analytics
    • Logic Apps
    • расширение Функции Azure = 3.x (поддерживается расширение <Функции Azure 4.0 и выше)
    • Поиск Azure
    • Соединитель < Spark для Azure Cosmos DB 4.18.0
    • Любая сторонняя библиотека или средство, которое имеет зависимость от пакета SDK Azure Cosmos DB, который не является пакетом SDK для .NET версии 3 = 3.27.0 или пакет SDK >>для Java версии 4 = 4.42.0

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

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

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

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