レート制限のイベントを観察する
このユニットでは、レート制限イベントを特定する方法について取り上げます。
Azure Cosmos DB for NoSQL を使用しているときに、Azure Cosmos DB から "状態コード エラー" 429 が返される場合があります。 このエラー コードは、要求率が大きすぎるという例外が発生したことを示しています。 この例外が返されるということは、Azure Cosmos DB の要求がレート制限されているということです。
プロビジョニング スループットが使用されているとき、ワークロードには、1 秒あたりの要求ユニット数 (RU/秒) が設定されています。 サービスに対する操作 (読み取り、書き込み、クエリ) を実行すると、要求ユニット (RU) が消費されます。 操作を実行する際、1 秒の間に、プロビジョニング済みの RU/秒よりも多くの RU が消費された場合には、Azure Cosmos DB によって 429 例外が返されます。
429 例外が返される主な理由は次の 3 つです。
- 要求率が大きい。
- The request did not complete due to a high rate of metadata requests. (メタデータ要求のレートが高いため、要求は完了しませんでした。)
- The request did not complete due to a transient service error. (一時的なサービス エラーが原因で、要求は完了しませんでした。)
それぞれの理由と特定方法について見ていきましょう。
要求率が大きいです
この例外の 3 つの理由のうち、最も一般的なものです。 データに対する操作の RU が、プロビジョニング済みの RU/秒を超えると、Azure Cosmos DB からこの例外が返されます。
429 例外の考えられる原因を調査するには、次のことを行います。
- Azure portal で、[Azure Cosmos DB アカウント] ページを開きます。
- [Insights->Request] メニューで、[状態コードごとの要求の合計数] グラフを確認し、429 例外の発生を確認します。
- 必要な場合は、[時間の範囲] と [データベース] でグラフをフィルタリングして、必要な期間とデータベースのみに絞り込みます。
ほとんどのアプリケーションでは、429 例外は要求の 5% 未満となるのが普通です。
429 例外の発生率が 5% を超えている場合は、ホット パーティションが原因で例外が発生している可能性があります。
データベース アクセスがホット パーティションに遭遇しているかどうかを確認するには、Azure portal の Azure Cosmos DB アカウントで [分析情報] -> [スループット] に移動し、[PartitionKeyRangeID ごとの正規化された RU 消費量] グラフを見ます。
メタデータ要求に対するレート制限
次のメタデータ操作が大量に実行されているときに、429 例外が発生することがあります。
- コンテナーまたはデータベースの作成、読み取り、更新、または削除
- Cosmos アカウント内のデータベースまたはコンテナーの一覧表示
- 現在のプロビジョニング スループットを照会する
429 例外の原因がメタデータ要求であるかどうかを調査するには、Azure portal の Azure Cosmos DB アカウントで [分析情報] -> [システム] に移動し、[容量を超過したメタデータ要求 (429)] グラフを確認します。
一時的なサービス エラーによるレート制限
429 例外の発生とほぼ同時に、[分析情報] ->[状態コードごとの要求の合計] グラフに 503 エラーも報告されている場合があります。 これらの例外は、429 例外が一時的なサービス エラーが原因で発生していることを示します。