我在执行批量更新插入操作时遇到了 CosmosDB 问题。错误代码 16500 表示“TooManyRequests”(429) 状态,这表明请求速率对于预配置的吞吐量来说太高。完整的错误信息如下:
{'writeErrors': [{'index': 0, 'code': 16500, 'errmsg': 'Error=16500, RetryAfterMs=82, Details=\'Response status code does not indicate success: TooManyRequests (429); Substatus: 3200; ActivityId: 2575d098-ea8f-4bf2-a9d3-0da63bdd4d76; Reason: (\r\nErrors : [\r\n "Request rate is large. More Request Units may be needed, so no changes were made. Please retry this request later. Learn more: http://aka.ms/cosmosdb-error-429"\r\n]\r\n);', 'op': {'q': {'reviewId': '684f0cdb-8823-4e29-a2f5-58980d275ebe'}, 'u': {'$setOnInsert': {'reviewId': '684f0cdb-8823-4e29-a2f5-58980d275ebe', 'org_id': '', 'content': 'Good', 'comment': '', 'usefulness': '', 'date_time': '2024-08-14 12:51:09', 'user_name': 'Asmini Kumar Sahu', 'rating': 5, 'source': 'play_store', 'type': 'review', 'ai_analysis': {}, 'rca': {}, 'emotional_analysis': '', 'sentimental_analysis': '', 'theme': '', 'analyzed': False, 'appVersion': '476.0.0.49.74', 'thumbsUpCount': 0, 'batch_id': 22, 'toxicity_level': '', 'dashboard_id': '66be2bd29587dbbd8762dc13'}}, 'multi': False, 'upsert': True}}], 'writeConcernErrors': [], 'nInserted': 0, 'nUpserted': 0, 'nMatched': 0, 'nModified': 0, 'nRemoved': 0, 'upserted': []}
尝试在单个批处理操作中保存 100 个项目时发生此错误。我的 CosmosDB 帐户配置为每秒 1000 个请求单元 (RU)。
我尝试一次将 100 个项目更新插入 CosmosDB 容器中,希望操作成功完成且没有任何错误。但是,我收到“TooManyRequests”(429) 错误,这意味着请求超出了可用的 RU。
我预计 CosmosDB 能够在规定的吞吐量内处理批处理操作,但该操作似乎需要比可用的 RU 更多的 RU。我还没有尝试过减少批量大小或增加 RU。
这是一个批量事务,因此它要么成功,要么一起失败,并且不能被 SDK 拆分为单独的事务。所以是的;您需要使用较小的批次或增加 RU 大小。
您还可以转到 Cosmos 资源上的
Features
并打开 Burst capacity
。它将允许您累积 5 分钟内未使用的 RU,并允许高达 3000 RU/s 的突发。这会给你更多的回旋余地,但你只需要测试它是否足以满足你的用例。