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 分かかる場合があります。
Azure Cosmos DB アカウントがプレビューの対象かどうかを確認するには、Azure portal の組み込みの適格性チェッカーを使用できます。 Azure portal の Azure Cosmos DB アカウントの概要ページから、問題の診断と解決 ->スループットとスケーリング ->パーティションのマージに移動します。 パーティション マージプレビューの適格性の確認診断を実行します。
マージするコンテナーを識別する方法
これらの両方の条件を満たすコンテナーは、パーティションをマージするとメリットを得られる可能性があります。
- 条件 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/秒です。
条件 2
物理パーティションあたりの現在の平均ストレージを確認するには、最初にコンテナー全体のストレージ (データ + インデックス) を確認します。
[分析情報]>[ストレージ]>[データとインデックスの使用状況] に移動します。 ストレージの合計は、データとインデックスの使用量の合計です。 次の例では、コンテナーのストレージの合計は 74 GB です。
次に、物理パーティションの合計数を確認します。 このメトリックは、条件 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 を使っている場合は、適切な移行ガイドに従ってください。
- レガシ .NET v2 SDK: .NET SDK v3 移行ガイド
- レガシ Java v3 SDK: Java SDK v4 移行ガイド
サポートされていないコネクタ
プレビューに登録した場合、次のコネクタは失敗します。
- 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 に依存しているすべてのサード パーティのライブラリまたはツール
¹ これらのコネクタは将来サポート予定です。
次の手順
- Azure Cosmos DB での Azure CLI の使用の詳細を確認します。
- Azure Cosmos DB での Azure PowerShell の使用の詳細を確認します。
- Azure Cosmos DB でのパーティション分割について詳細を確認します。