Azure Cosmos DB でパーティションをマージする (プレビュー)

適用対象: NoSQL MongoDB

Azure Cosmos DB (プレビュー) でパーティションをマージすると、コンテナーに使用される物理パーティションの数を減らすことができます。 マージを使用すると、スループットで断片化されたコンテナー (パーティションあたりの RU/秒が低い) またはストレージ (パーティションあたりのストレージ数が少ない) で、物理パーティションを再調整できます。 コンテナーのスループットがスケールアップされ、スケール ダウンする必要がある場合、マージはスループットの断片化の問題を解決するのに役立ちます。 プロビジョニングされた RU/秒の量が同じである場合、物理パーティションの数が少ないほど、各物理パーティションは RU/秒全体の多くを取得します。 パーティションを最小化すると、コンテナーから大量のデータが削除され、パーティションあたりの RU/s が低い場合にレート制限の確率が減少します。 マージは、未使用または空のパーティションをクリアし、ストレージの断片化の問題を効果的に解決するのに役立ちます。

作業の開始

パーティションのマージの使用を開始するには、Azure Cosmos DB アカウントの [機能] ページに移動します。 パーティションのマージ (プレビュー) 機能を選択して有効にします。

機能を有効にする前に、お使いの Azure Cosmos DB アカウントが、すべてのプレビュー資格条件を満たしていることを確認してください。 この機能を有効にすると、有効になるまでに 15 分から 20 分かかります。

注意事項

アカウントでマージが有効になっている場合、マージが進行中かどうかに関係なく、.NET SDK バージョン >= 3.27.0、Java SDK >= 4.42.0、または Azure Cosmos DB Spark コネクタ >= 4.18.0 からの要求のみがアカウントで許可されます。 他の SDK (以前の .NET SDK、以前の Java SDK、すべての JavaScript SDK、すべての Python SDK、すべての Go SDK) またはサポートされていないコネクタ (Azure Data Factory、Azure Search、Azure Functionsextension <= 3.x、Azure Stream Analytics など) からの要求はブロックされ、失敗します。 この機能を有効にする前に、サポートされている SDK バージョンにアップグレードしていることを確認してください。 この機能を有効または無効にした後で、アカウントに完全に反映されるまでに 15 分から 20 分かかる場合があります。 使用が完了した後に機能を無効にする予定の場合、SDK とマージでサポートされていないコネクタからの要求が許可されるまでに 15 分から 20 分かかる場合があります。

Screenshot of Features pane and Partition merge feature.

Azure Cosmos DB アカウントがプレビューの対象かどうかを確認するには、Azure portal の組み込みの適格性チェッカーを使用できます。 Azure portal の Azure Cosmos DB アカウントの概要ページから、問題の診断と解決 ->スループットとスケーリング ->パーティションのマージに移動します。 パーティション マージプレビューの適格性の確認診断を実行します。

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: 物理パーティションあたりの現在の RU/秒が < 3,000 RU/秒
  • 条件 2: 物理パーティションあたりの現在の平均ストレージ (GB) が < 20 GB

条件 1 は多くの場合、以前に RU/秒をスケールアップし (多くの場合、データ インジェストのため)、今度は安定状態でスケールダウンする場合に発生します。 条件 2 は多くの場合、大量のデータを削除/TTL し、未使用のパーティションが残っている場合に発生します。

条件 1

物理パーティションあたりの現在の RU/秒を確認するには、Cosmos アカウントから [メトリクス] に移動します。 [Physical Partition Throughput](物理パーティションのスループット) メトリックを選択し、データベースとコンテナーにフィルターを適用します。 [PhysicalPartitionId] による分割を適用します。

自動スケーリングを使うコンテナーの場合、このメトリックでは現在プロビジョニングされている各物理パーティションに対する最大 RU/s が表示されます。 手動スループットを使うコンテナーの場合、このメトリックでは各物理パーティションに対する手動 RU/s が表示されます。

次の例では、5,000 RU/秒 (500 から 5,000 RU/秒の間でスケーリング) でプロビジョニングされた自動スケール コンテナーがあります。 これには 5 つの物理パーティションがあり、各物理パーティションは 1,000 RU/秒です。

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

条件 2

物理パーティションあたりの現在の平均ストレージを確認するには、最初にコンテナー全体のストレージ (データ + インデックス) を確認します。

[分析情報]>[ストレージ]>[データとインデックスの使用状況] に移動します。 ストレージの合計は、データとインデックスの使用量の合計です。 次の例では、コンテナーのストレージの合計は 74 GB です。

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

次に、物理パーティションの合計数を確認します。 このメトリックは、条件 1 で確認した [PhysicalPartitionThroughput] グラフの [PhysicalPartitionIds] の個別の数です。 この例では、5 つの物理パーティションがあります。

最後に、次の計算をします: ストレージの合計 (GB)/物理パーティションの数。 この例では、物理パーティションあたり平均 14.8 GB (74 GB/5 物理パーティション) になります。

条件 1 と 2 に基づき、このコンテナーはパーティションをマージすることでメリットを得られる可能性があります。

物理パーティションのマージ

PowerShell では、フラグ -WhatIf が渡されると、Azure Cosmos DB によってシミュレーションが実行され、マージの予想結果が返されます。 この結果は、マージ自体が実行されていない場合でも返されます。 フラグが渡されないときは、リソースに対してマージが実行されます。 完了すると、コマンドは、マージ後の物理パーティションごとの現在のストレージ量を KB 単位で出力します。

ヒント

マージを実行する前に、プロビジョニングされた RU/秒 (手動 RU/秒または自動スケールの最大 RU/秒) を、マージ後の目的の安定状態 RU/秒にできるだけ近づけて、システムが効率的なパーティション レイアウトを計算できるようにすることをお勧めします。

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/s を増やすと、進行中のマージ操作が取り消され、コンテナーの RU/s が新しい値で更新されます。 要求された RU/s に応じて、スケールアップがすぐに行われる場合もあれば、時間がかかる場合もあります。 マージの実行中に RU/s を減らすと、RU/s はすぐに新しい RU/s に更新されます。 進行中のマージは、マージがトリガーされたときに設定された RU/s に基づいて同じ対象パーティション数で続行されます。 ベスト プラクティスとして、マージ操作が完了するまで待ってから、コンテナーまたはスループットの設定を変更することをお勧めします。

[動作状況ログ] をチェックし、イベント [Merge the physical partitions of a MongoDB collection] (MongoDB コレクションの物理パーティションをマージする) または [Merge the physical partitions of a SQL container] (SQL コンテナーの物理パーティションをマージする) でフィルターすることで、マージがまだ進行中かどうかを追跡できます。

制限事項

現時点でのマージ機能の制限事項を次に示します。

プレビュー資格条件

プレビューに登録するには、Azure Cosmos DB アカウントが次のすべての条件を満たしている必要があります。

  • Azure Cosmos DB アカウントでは、バージョン >=3.6 の NoSQL 用 API または MongoDB 用 API が使用されます。
  • Azure Cosmos DB アカウントは、プロビジョニングされたスループット (手動または自動スケーリング) を使用します。 マージは、サーバーレス アカウントには適用されません。
  • Azure Cosmos DB アカウントは単一書き込みリージョン アカウントです (複数リージョンの書き込みアカウントに対してマージはサポートされません)。
  • Azure Cosmos DB アカウントは、次の機能を使用しません。
  • API for NoSQL を使っている場合、アプリケーションで Azure Cosmos DB .NET v3 SDK (バージョン 3.27.0 以降) または Java v4 SDK (バージョン 4.42.0 以降) を使う必要があります。 アカウントでマージ プレビューが有効な場合、アカウントは、非 .NET/Java SDK または以前の .NET/Java SDK バージョンから送信された要求を受け入れません。
    • MongoDB 用 API でこの機能を使用する場合、SDK またはドライバーの要件はありません。
  • Azure Cosmos DB アカウントは、現在サポートされていないコネクタを使用しません。
    • Azure Data Factory
    • Azure Stream Analytics
    • Logic Apps
    • Azure Functions 拡張機能 <= 3.x (Azure Functions 拡張機能 4.0 以降がサポートされています)
    • Azure Search
    • Azure Cosmos DB Spark コネクタ < 4.18.0
    • .NET v3 SDK v3.27.0 以降または Java v4 SDK 4.42.0 以降ではない Azure Cosmos DB SDK に依存しているすべてのサード パーティのライブラリまたはツール

アカウントのリソースと構成

  • マージは、NoSQL 用 API アカウントと MongoDB 用 API アカウントでのみ使用できます。 MongoDB 用 API アカウントの場合、MongoDB アカウントのバージョンは 3.6 以上である必要があります。
  • マージは、単一リージョン書き込みのアカウントでのみ使用できます。 複数リージョン書き込みのアカウントのサポートは利用できません。
  • マージ機能を使うアカウントでは、以下の機能も使用できません (マージが有効なアカウントにこれらの機能を追加した場合、アカウントはリソースをマージできません)。
  • コンテナーがマージされた後は、開始時刻とともに変更フィードを読み取ることはできません。 今後、この機能のサポートが予定されています。

SDK の要件 (NoSQL 用 API のみ)

マージ機能が有効になっているアカウントは、最新バージョンの .NET v3 SDK または Java v4 SDK を使うときにのみサポートされます。 この機能がアカウントで有効になっている場合は、(マージを実行するかどうかに関係なく) アカウントを使用してサポートされている SDK のみを使用する必要があります。 他の SDK または以前のバージョンから送信された要求は受け入れられません。 サポートされている SDK を使用している限り、マージが進行中でもアプリケーションは引き続き実行できます。

サポートされている SDK の最新バージョンを確認してください。

SDK サポートされているバージョン パッケージ マネージャーのリンク
.NET SDK v3 >= 3.27.0 https://www.nuget.org/packages/Microsoft.Azure.Cosmos
Java SDK v4 "4.42.0 以降" https://mvnrepository.com/artifact/com.azure/azure-cosmos

今後、他の SDK のサポートが予定されています。

ヒント

プレビューに登録する前に、互換性のある SDK バージョンを使用するようにアプリケーションが更新されていることを確認する必要があります。 レガシ SDK を使っている場合は、適切な移行ガイドに従ってください。

サポートされていないコネクタ

プレビューに登録した場合、次のコネクタは失敗します。

  • Azure Data Factory ¹
  • Azure Stream Analytics ¹
  • Logic Apps ¹
  • Azure Functions 拡張機能 <= 3.x (Azure Functions 拡張機能 4.0 以降がサポートされています) ¹
  • Azure Search ¹
  • Azure Cosmos DB Spark コネクタ < 4.18.0
  • .NET v3 SDK v3.27.0 以降または Java v4 SDK 4.42.0 以降ではない Azure Cosmos DB SDK に依存しているすべてのサード パーティのライブラリまたはツール

¹ これらのコネクタは将来サポート予定です。

次の手順