レート制限のイベントを観察する

完了

このユニットでは、レート制限イベントを特定する方法について取り上げます。

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 例外の考えられる原因を調査するには、次のことを行います。

  1. Azure portal で、[Azure Cosmos DB アカウント] ページを開きます。
  2. [Insights->Request] メニューで、[状態コードごとの要求の合計数] グラフを確認し、429 例外の発生を確認します。
  3. 必要な場合は、[時間の範囲][データベース] でグラフをフィルタリングして、必要な期間とデータベースのみに絞り込みます。

ほとんどのアプリケーションでは、429 例外は要求の 5% 未満となるのが普通です。

状態コードに基づくグラフと調整された要求 (429 例外) に基づくグラフを示す図。

429 例外の発生率が 5% を超えている場合は、ホット パーティションが原因で例外が発生している可能性があります。

データベース アクセスがホット パーティションに遭遇しているかどうかを確認するには、Azure portal の Azure Cosmos DB アカウントで [分析情報] -> [スループット] に移動し、[PartitionKeyRangeID ごとの正規化された RU 消費量] グラフを見ます。

ホット パーティションのスループットに基づくグラフを示す図。

メタデータ要求に対するレート制限

次のメタデータ操作が大量に実行されているときに、429 例外が発生することがあります。

  • コンテナーまたはデータベースの作成、読み取り、更新、または削除
  • Cosmos アカウント内のデータベースまたはコンテナーの一覧表示
  • 現在のプロビジョニング スループットを照会する

429 例外の原因がメタデータ要求であるかどうかを調査するには、Azure portal の Azure Cosmos DB アカウントで [分析情報] -> [システム] に移動し、[容量を超過したメタデータ要求 (429)] グラフを確認します。

メタデータ アクセスのグラフを示す図。

一時的なサービス エラーによるレート制限

429 例外の発生とほぼ同時に、[分析情報] ->[状態コードごとの要求の合計] グラフに 503 エラーも報告されている場合があります。 これらの例外は、429 例外が一時的なサービス エラーが原因で発生していることを示します。