Azure Cosmos DB を使用すると、データベースとコンテナーの標準 (手動) スループットまたは自動スケーリング スループットを構成できます。 自動スケーリングでは、ワークロードに合わせてスループット (RU/秒) が調整され、ハイ パフォーマンスとコスト効率が確保されます。
活用事例
自動スケーリングのプロビジョニング済みスループットは、変動するトラフィック パターンまたは予測できないトラフィック パターンを持つミッション クリティカルなワークロードに最適であり、ハイ パフォーマンスとスケールのためにサービス レベル アグリーメント (SLA) が必要です。 既定では、自動スケーリングは、最もアクティブなリージョンとパーティションに基づいてワークロードをスケーリングします。 リージョンとパーティション間で異なるワークロード パターンを持つ一様でないワークロードの場合、このスケーリングによって不要なスケールアップが発生する可能性があります。 動的スケーリングまたは動的自動スケーリングは、自動スケーリング機能を強化するものであり、リージョンごとおよびパーティションレベルごとの使用状況に基づいて、変動するワークロードを個別に効率よくスケーリングするのに役立ちます。 動的スケーリングは、ホット パーティションが頻繁に発生する場合や複数のリージョンがある場合にコストを節約するのに役立ちます。
自動スケールの利点
自動スケーリングのプロビジョニング スループットが構成された Azure Cosmos DB データベースとコンテナーには、次の利点があります。
簡単: 自動スケーリングを使用すると、カスタム スクリプトや手動スケーリングが不要になり、RU/秒の管理が簡単になります。
スケーラブル: データベースとコンテナーでは、必要に応じて、プロビジョニング スループットが自動的にスケーリングされます。 クライアント接続やアプリケーションは中断されず、Azure Cosmos DB SLA への影響もありません。
コスト効率: 自動スケーリングでは、使用されていないときにスケールダウンすることで、RU/秒とコストが最適化されます。 ワークロードに必要なリソースに対してのみ 1 時間単位で支払います。 完全な
Tmaxを 1 か月に 66% 以下の時間だけ使用すると、自動スケーリングによってコストを節約できます。 動的スケーリングにより、高可用性を目的としたセカンダリ リージョンが追加されることでもコスト効率が向上します。各リージョンとパーティションは使用量に基づいて個別にスケーリングされるためです。 詳細については、「標準 (手動) および自動スケーリングのプロビジョニング済みスループットから選択する方法」を参照してください。高可用性: 自動スケーリング機能を備えたデータベースおよびコンテナーでは、グローバルに分散された耐障害性のある Azure Cosmos DB バックエンドが使用され、データの耐久性と可用性が確保されます。
自動スケーリングの活用例
自動スケーリングのユース ケースは次のとおりです。
変動する予測不可能なワークロード: ワークロードの使用率が変動したり、急増を予測できなかったりする場合には、自動スケーリングを利用して、使用状況に基づいて自動的にスケールアップおよびスケールダウンすることができます。 たとえば、季節的なトラフィック パターンを持つ小売 Web サイト、一日の中で使用量の上下が大きい IoT ワークロード、ピーク使用量が時折発生する基幹業務アプリケーションなどがあります。 自動スケーリングを使用すると、ピーク時または平均容量のスループットを手動で割り当てる必要がなくなります。
新しいアプリケーション: 新しいアプリケーションを開発していて、必要なスループット (RU/秒) がわからない場合は、自動スケーリングを使用すると、作業を簡単に開始できます。 自動スケーリングのエントリ ポイントである 100 から 1000 RU/秒で開始し、使用状況を監視して、時間の経過と共に適切な RU/秒を判断することができます。
使用頻度の低いアプリケーション: 1 日、1 週間、あるいは 1 か月に数時間のみ使用されるアプリケーション (例えば、利用頻度の低いアプリ、ウェブサイト、ブログなど) をお持ちの場合 自動スケーリングでは、ピーク時の使用に対応できるよう容量が調整され、ピーク時が過ぎるとスケールダウンされます。
開発およびテストのワークロード: 自身やチームで Azure Cosmos DB データベースとコンテナーを業務時間中は使うが、夜間や週末には必要ない場合、自動スケーリングにより、使っていないときに最小にスケールダウンすることで、コストを節約できます。
スケジュールされた運用ワークロード/クエリ: アイドル期間中に実行することを検討しているスケジュールされた一連の要求、操作、またはクエリがある場合には、自動スケーリングを利用して簡単に実行できます。 ワークロードが実行されると、スループットは必要な値に自動的にスケーリングされ、その後スケールダウンされます。
これらの問題に対するカスタム ソリューションを構築するには、かなりの時間が必要であり、アプリケーションの構成やコードが複雑になります。 自動スケーリングを利用すれば、上述したシナリオをすぐに実現でき、容量をカスタムまたは手動でスケーリングする必要がなくなります。
動的スケーリングのユース ケース
動的スケーリングのユース ケースには、次のような場合があります。
- ディザスター リカバリーのために、トラフィックの多いプライマリ リージョンとセカンダリ パッシブ リージョンを持つデータベース ワークロード。
- 動的スケーリングを使用する場合、複数のリージョンで高可用性を実現するほうがコスト効率が高くなります。 セカンダリ リージョンは、アイドル状態では個別に自動的にスケールダウンします。 また、セカンダリ リージョンは、アクティブになった場合や、プライマリ リージョンからの書き込みレプリケーション トラフィックを処理するときに自動的にスケールアップされます。
- 複数リージョンのデータベース ワークロード
- 多くの場合、これらのワークロードでは、一日の中での自然なトラフィックの増加と低下により、リージョン間での要求の分散が不均一になります。 たとえば、データベースは、グローバルに分散したタイムゾーンにおいて、営業時間中はアクティブな状態にあります。
自動スケーリングのスループットのしくみ
コンテナーとデータベースを自動スケーリングに構成するときは、必要な最大スループット Tmax を指定します。 Azure Cosmos DB では、0.1*Tmax <= T <= Tmax が実現されるように、スループット T がスケーリングされます。 たとえば、最大スループットを 20,000 RU/秒に設定すると、スループットは 2,000 から 20,000 RU/秒の間でスケーリングされます。 スケーリングは自動的かつ瞬時に行われるので、プロビジョニング済み Tmax を最大として、いつでも遅延なく使用できます。
料金は、その 1 時間でシステムがスケーリングした最大スループット T に対して、時間単位で請求されます。 動的スケーリングが有効になっている場合、スケーリングは各物理パーティションとリージョンでの RU/秒の使用量に基づいて行われます。 この課金方法により、各パーティションとリージョンが個別にスケーリングされるため、不要なスケールアップが回避され、一様でないワークロードのコスト削減につながる可能性があります。
自動スケーリングの最大スループット Tmax のエントリ ポイントは 1,000 RU/秒で、100 から 1000 RU/秒の間でスケーリングされます。
Tmax は 1000 RU/秒の増分で設定でき、値はいつでも変更できます。
たとえば、コレクションに 1000 RU/秒と 2 個のパーティションがある場合、各パーティションは最大 500 RU/秒にスケールアップできます。 1 時間のアクティビティでは、使用率は次のようになります。
| リージョン | パーティション | スループット | 稼働率 | メモ |
|---|---|---|---|---|
| 書き込み | P1 | <= 500 RU/秒 | 100% | 書き込み操作の 50 RU/秒、読み取り操作の 450 RU/秒で構成される 500 RU/秒。 |
| 書き込み | P2 | <= 200 RU/秒 | 40% | 読み取り操作のみで構成される 200 RU/秒。 |
| 読み取り | P1 | <= 150 RU/秒 | 30% | 書き込みリージョンからレプリケートされた書き込みに使用する 50 RU/秒で構成される 150 RU/秒。 このリージョンの読み取り操作には、100 RU/秒が使用されます。 |
| 読み取り | P2 | <= 50 RU/秒 | 10% |
動的スケーリングを使用しない場合、システムは、最もホットなパーティションに基づいてすべてのパーティションを均一にスケーリングします。 この場合、最もアクセスが集中しているパーティションは 100% の使用率であるため、書き込みリージョンと読み取りリージョンの両方で、すべてのパーティションが 1,000 RU/秒にスケーリングされ、合計のスループットは 2,000 RU/秒にスケーリングされることになります。
動的スケーリングでは、各パーティションとリージョンのスループットが個別にスケーリングされ、合計 900 RU/秒にスケーリングされます。これにより、実際のトラフィック パターンがより適切に反映され、コストが削減されます。
既存のリソースに対する自動スケーリングの有効化
Azure portal、CLI、または PowerShell を使用して、既存のデータベースまたはコンテナーで自動スケーリングを有効にできます。 自動スケーリングと標準 (手動) のプロビジョニング済みスループット間の切り替えは、いつでも行うことができます。 詳しくは、こちらのドキュメントをご覧ください。
自動スケーリングのスループットとストレージ制限
Tmax の値に応じて、データベースまたはコンテナーでは合計 0.1 * Tmax GB を保存します。 このストレージ量に達すると、アプリケーションに影響を与えることなく、新しいストレージ値に基づいて最大 RU/秒が自動的に増加します。
たとえば、最大 RU/秒が 50,000 RU/秒 (5000 から 50,000 RU/秒の間でスケーリング) の場合、最大 5,000 GB のデータを格納できます。 6,000 GB に達するなど、ストレージが 5,000 GB を超える場合、新しい最大 RU/秒は 60,000 RU/秒になります (6000 から 60,000 RU/秒の間でスケーリングされます)。
自動スケーリングによるデータベース レベルのスループットを使用する場合は、100 GB のストレージを超えない限り、最初の 25 個のコンテナーによって、自動スケーリングの最大の 1000 RU/秒 (100 から 1000 RU/秒の間でスケーリングされます) を共有できます。 詳しくは、こちらのドキュメントをご覧ください。
動的スケーリングの有効化
動的スケーリングは、2024 年 9 月 25 日以降に作成されたすべての Azure Cosmos DB アカウントに対して既定で有効になります。 古いアカウントでこの機能を有効にするには、次に示すように、Azure PowerShell、CLI、REST API を使用してプログラム から、または Azure portal の機能ウィンドウから行えます。
Azure portal で Azure Cosmos DB アカウントに移動します。
[機能] ページを選択します。
[動的スケーリング (リージョンごとおよびパーティションごとの自動スケーリング)] 機能を見つけて有効にします。
重要
この機能はアカウント レベルで有効になっているため、アカウント内のすべての自動スケーリング コンテナーと自動スケーリングの共有スループット データベースには、この機能が自動的に適用されます。 この機能を有効にしても、手動スループットを使用しているアカウント内のリソースには影響しません。 動的スケーリングを利用するには、手動リソースを自動スケーリングに変更する必要があります。 この機能を有効にしても、ダウンタイムやパフォーマンスに影響はありません。 この機能は、サーバーレス アカウントには適用されません。 この機能は、すべてのクラウドでサポートされています。
メトリックの監視
次のメトリックを使用して、自動スケーリングと動的スケーリングを監視できます。
| メトリックの名前 | 定義 | メトリックの使用方法 |
|---|---|---|
| プロビジョニングされたスループット | 1 時間の間にスケーリングされた最も高い RU/秒の集計値を示し、その時間にスケーリングされた RU/秒の合計を表します。 |
Provisioned Throughput メトリックを使用して、各時間に課金される RU/秒を確認できます。 自動スケーリングでは、各時間の最もアクティブなパーティションに基づいて課金され、同じ設定がすべてのパーティションとリージョンに適用されます。 動的オートスケールでは、各パーティション レベルとリージョン レベルで、各時間にスケーリングされた最も高い RU/秒の集計値に対して課金されます。 |
| Normalized RU Consumption (正規化された RU 消費量) | このメトリックは、各パーティション レベルおよびリージョン レベルでプロビジョニングされた RU/秒と消費された RU/秒の比率を表します。 | このメトリックを使用して、オートスケールの最大スループットが過少にプロビジョニングされているか、過剰にプロビジョニングされているかどうかを判断します。 メトリック値が常に 100 % であり、アプリケーションでレート制限 (429 エラー コード) が表示される場合は、さらに RU/秒が必要である可能性があります。 これに対し、このメトリック値が低く、レート制限がない場合は、RU/秒を最適化してスケールダウンする余地がある可能性があります。 コード 429 レート制限エラーを解釈してデバッグする方法の詳細を確認してください。 Normalized RU Consumption メトリックには、セカンダリ リージョンの読み取りトラフィックに加えて、プライマリ リージョンからの書き込みレプリケーション トラフィックが原因でセカンダリ リージョンで消費された RU/秒が反映されます。 |
| 自動スケーリングの RU | 動的オートスケールが有効なアカウントに対してのみ、各パーティション レベルとリージョン レベルで動的にスケーリングされたプロビジョニング済みスループットを表示します。 | このメトリックを使用して、各リージョンのパーティションの使用状況に基づいて個別にスケーリングする方法を確認できます。 Azure Monitor メトリック ( Autoscaled RU) を使用して、パーティションとリージョン間で新しい自動スケーリングがどのように適用されているかを分析します。 目的のデータベース アカウントとコンテナーにフィルターを適用し、物理パーティション ID メトリックでフィルター処理または分割します。 このメトリックは、さまざまなリージョンのすべてのパーティションを示します。 |
重要
容量を管理するには、Azure Cosmos DB のネイティブ動的スケーリング機能の使用をお勧めします。 ただし、必要に応じて、Azure Monitor の 正規化された RU 従量課金メトリック を使用して、プログラムによるスケーリングの決定を行うことができます。 Azure Cosmos DB ソフトウェア開発キット (SDK) で ReadThroughputAsync() 呼び出しを使用して ProvisionedThroughput 値を取得したり、Azure Monitor で ProvisionedThroughput メトリックを使用したりすることは推奨されず、不正確な結果につながります。 これらのメトリックは、遅延を伴う課金スループットを表し、スケーリングの決定には使用しないでください。
比較 – 手動または自動スケーリングのスループットで構成されたコンテナー
詳細については、標準 (手動) と自動スケーリングのスループットの選択に関するこの ドキュメント を参照してください。
| 標準 (手動) のスループットを利用したコンテナー | 自動スケーリングのスループットを利用したコンテナー | |
|---|---|---|
| プロビジョニング スループット (RU/秒) | 手動でプロビジョニングします。 | ワークロードの使用パターンに基づいて、自動的に瞬時にスケーリングされます。 |
| 要求/操作のレート制限 (429) | 使用量がプロビジョニング済みの容量を超えた場合、発生する可能性があります。 | 構成した自動スケーリングのスループットの範囲内で RU/秒を使用する場合は、発生しません。 |
| 容量計画 | 容量を計画し、必要なスループットを正確に設定する必要があります。 | 容量の計画と管理は、システムによって自動的に処理されます。 |
| 料金 | 1 時間あたりの標準 (手動) の RU/秒レートを使用して、手動でプロビジョニングされた RU/秒に対して、時間単位で料金を支払います。 | システムによって 1 時間の枠内でスケールアップされた最大 RU/秒に対して、時間単位で料金を支払います。 単一の書き込みリージョンのアカウントの場合、1 時間あたりの自動スケーリングの RU/秒レートを使用して、使用された RU/秒に対して時間単位で料金を支払います。 書き込みリージョンが複数あるアカウントの場合、自動スケーリングに対する追加料金は発生しません。 同じ 1 時間あたりの複数リージョン書き込み RU/秒レートを使用して、使用されたスループットに対して時間単位で料金を支払います。 |
| 最適なワークロードの種類 | 予測可能で安定したワークロード | 予測不可能で変動するワークロード |
プロビジョニングされた標準のスループットから自動スケーリングへの移行
多くのリソースを標準プロビジョニング済みスループットから自動スケーリングに移行するユーザーは、Azure CLI スクリプトを使用して、Azure サブスクリプション内のすべてのスループット リソースを自動スケーリングに移行できます。
関連コンテンツ
- 自動スケーリングに関する FAQ を確認する。
- 手動および自動スケーリングのスループットから選択する方法を確認する。
- Azure Cosmos DB データベースまたはコンテナー上で自動スケーリングのスループットを割り当てる方法を確認する。
- Azure Cosmos DB でのパーティション分割について詳細を確認する。