適用対象: NoSQL
"要求ヘッダーが大きすぎる" メッセージは、HTTP エラー コード 400 でスローされます。 このエラーは、要求ヘッダーのサイズが大きくなりすぎて、最大許容サイズを超えている場合に発生します。 最新バージョンの Azure Cosmos DB SDK for .NET を使用することをお勧めします。 このメジャー バージョンでは例外メッセージにヘッダー サイズのトレースが追加されているため、バージョン 3.x を使用することをお勧めします。
トラブルシューティングの手順
"要求ヘッダーが大きすぎる" メッセージは、セッションまたは継続トークンが大きすぎる場合に発生します。 次のセクションでは、各カテゴリの問題の原因とその解決方法について説明します。
セッション トークンが大きすぎる
このセクションでは、セッション トークンが大きすぎるというシナリオについて説明します。
原因
400 Bad Request が発生する最も可能性の高い原因は、セッション トークンが大きすぎることです。 次の文に該当する場合は、セッション トークンが大きすぎます。
- このエラーは、継続トークンがないポイント操作 (作成、読み取り、更新など) で発生します。
- この例外は、アプリケーションに変更を加えずに開始されました。 セッション トークンは、コンテナー内のパーティション数が増加するにつれて増大します。 データ量が増加したり、スループットが増加したりすると、パーティションの数が増加します。
一時的な軽減策
クライアント アプリケーションを再起動して、すべてのセッション トークンをリセットします。 最終的に、問題の原因となったセッション トークンは以前のサイズに戻ります。 この問題を完全に回避するには、次のセクションの解決方法を使用します。
解決策
重要
.NET v3.20.1 または v2.16.1 以上にアップグレードします。 これらのマイナー バージョンには、ヘッダーが拡大し、サイズの制限に達するのを防ぐために、セッション トークンのサイズを小さくする最適化が含まれています。
- .NET v3 または .NET v2 パフォーマンスのヒントに関する記事のガイダンスに従います。 伝送制御プロトコル (TCP) で直接接続モードが使用されるようにアプリケーションを変換します。 TCP プロトコルを使用した直接接続モードでは HTTP プロトコルのようにヘッダー サイズの制限がないため、この問題は回避されます。 最新バージョンの SDK を使用してください。このバージョンには、サービスの相互運用性がない場合のクエリ操作に対する修正が含まれています。
- TCP プロトコルを使用した直接接続モードがワークロードのオプションでない場合は、クライアントの整合性レベルを変更することで軽減します。 セッション トークンは、Azure Cosmos DB の既定の整合性レベルであるセッションの整合性にのみ使用されます。 その他の整合性レベルでは、セッション トークンは使用されません。
継続トークンが大きすぎる
このセクションでは、後続トークンが大きすぎるというシナリオについて説明します。
原因
クエリ操作で後続トークンが大きくなり過ぎた際に、そのトークンを使用すると400 Bad Request が発生することがあります。 このエラーは、さまざまなクエリにサイズがそれぞれ異なる後続トークンが含まれている場合にも発生する可能性があります。
解決策
- .NET v3 または .NET v2 パフォーマンスのヒントに関する記事のガイダンスに従います。 TCP プロトコルで直接接続モードが使用されるようにアプリケーションを変換します。 TCP プロトコルを使用した直接接続モードでは HTTP プロトコルのようにヘッダー サイズの制限がないため、この問題は回避されます。
- TCP プロトコルを使用した直接接続モードがワークロードのオプションでない場合は、
ResponseContinuationTokenLimitInKb
オプションを設定します。 このオプションは、v2 のFeedOptions
または v3 のQueryRequestOptions
で見つかります。
次のステップ
- Azure Cosmos DB .NET SDK 使用時の問題を診断してトラブルシューティングする。
- .NET v3 と .NET v2 のパフォーマンス ガイドラインを確認する。