防止 Azure Cosmos DB for MongoDB 操作出现速率限制错误

适用对象: MongoDB

如果超出集合的吞吐量限制 (RU),则 Azure Cosmos DB for MongoDB 操作可能会遇到速率限制,从而导致 Mongo 请求指标出现 16500 错误。

启用服务器端重试 (SSR) 以自动重试操作。 SSR 会在帐户中的所有集合中以较短的延迟重试请求。 如果超时达到 60 秒,客户端将收到 ExceededTimeLimit 异常 (50)

使用 Azure 门户

  1. 登录到 Azure 门户

  2. 导航到 Azure Cosmos DB for MongoDB 帐户。

  3. 转到“设置”部分下面的“功能”窗格 。

  4. 选择“服务器端重试”。

  5. 单击“启用”为帐户中的所有集合启用此功能。

Azure Cosmos DB for MongoDB 的服务器端重试功能的屏幕截图

使用 Azure CLI

  1. 检查是否已为你的帐户启用了 SSR:

    az cosmosdb show --name accountname --resource-group resourcegroupname
    
  2. 为数据库帐户中的所有集合启用 SSR。 此更改生效可能需要长达 15 分钟的时间。

    az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableMongo DisableRateLimitingResponses
    
  3. 以下命令会通过从功能列表中删除 DisableRateLimitingResponses,对数据库帐户中的所有集合“禁用”服务器端重试。 此更改生效可能需要长达 15 分钟的时间。

    az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableMongo
    

常见问题解答

如何监视服务器端重试的效果?

可以在“Azure Cosmos DB 指标”窗格中查看在服务器端重试的 mongo 请求指标速率限制错误 (16500)。 请记住,启用 SSR 后,这些错误不会传递给客户端,因为它们是在服务器端处理和重试的。

可以在 Azure Cosmos DB 资源日志中搜索包含“estimatedDelayFromRateLimitingInMilliseconds”的日志条目。

服务器端重试是否会影响我的一致性级别?

服务器端重试不会影响请求的一致性。 如果请求受到速率限制,则会在服务器端重试。

服务器端重试是否影响客户端可能收到的任何类型的错误?

否。服务器端重试仅通过在服务器端重试来影响速率限制错误。 有了此功能,就不必在客户端应用程序中处理速率限制错误。 所有其他错误都会传递到客户端。

后续步骤

若要了解有关排除常见错误的更多信息,请参阅此文:

尝试为迁移到 Azure Cosmos DB 进行容量计划? 可以使用有关现有数据库群集的信息进行容量规划。