适用于: NoSQL
“请求标头太大”消息会引发 HTTP 错误代码 400。 如果请求标头的大小增大到超过允许的最大大小,则会发生此错误。
建议使用适用于 .NET 的 Azure Cosmos DB SDK 的最新版本。 应使用版本 3.x,因为此主要版本会将标头大小跟踪添加到异常消息。
故障排除步骤
如果会话或延续标记太大,则会出现“请求标头过大”消息。 以下各节介绍问题的原因及其解决方案在每个类别中。
会话令牌太大
本部分介绍会话令牌太大的情况。
原因
400 错误的请求很可能发生,因为会话令牌太大。 如果以下语句为 true,则会话令牌太大:
- 错误发生在点作(如创建、读取和更新),其中没有继续标记。
- 异常在未对应用程序进行任何更改的情况下启动。 会话令牌随着容器中的分区数的增加而增长。 随着数据量的增加或吞吐量的增加,分区数也会增加。
临时缓解
重启客户端应用程序以重置所有会话令牌。 最终,会话令牌会增长回导致问题的以前大小。 若要完全避免此问题,请使用下一部分中的解决方案。
解决方案
- 按照 .NET v3 或 .NET v2 性能提示文章中的指南进行作。 将应用程序转换为将直接连接模式与传输控制协议(TCP)配合使用。 具有 TCP 协议的直接连接模式没有标头大小限制(如 HTTP 协议),因此可避免此问题。 请确保使用最新版本的 SDK,该 SDK 在服务互作不可用时修复了查询作。
- 如果具有 TCP 协议的直接连接模式不是工作负荷的选项,请通过更改 客户端一致性级别来缓解它。 会话令牌仅用于会话一致性,这是 Azure Cosmos DB 的默认一致性级别。 其他一致性级别不使用会话令牌。
延续标记太大
本部分介绍延续令牌过大的情况。
原因
如果令牌增长过大,则会在查询作上使用延续令牌的 400 错误请求。 如果不同的查询具有不同的继续标记大小,则也会发生此错误。
解决方案
- 按照 .NET v3 或 .NET v2 性能提示文章中的指南进行作。 将应用程序转换为将直接连接模式与 TCP 协议配合使用。 具有 TCP 协议的直接连接模式没有标头大小限制(如 HTTP 协议),因此可避免此问题。
- 如果具有 TCP 协议的直接连接模式不是工作负荷的选项,请设置该
ResponseContinuationTokenLimitInKb
选项。 可以在 v2 或QueryRequestOptions
v3 中找到此选项FeedOptions
。
后续步骤
- 使用 Azure Cosmos DB .NET SDK 时诊断和排查问题
- 了解 .NET v3 和 .NET v2 的性能准则