Azure CosmosDB MongoDB执行deleteMany()遇请求超时问题求助
排查Azure CosmosDB MongoDB deleteMany()超时问题
针对执行deleteMany()时出现的code 50 请求超时错误,即使禁用吞吐量限制仍未解决,可从以下几个方向排查:
缺失查询索引
你的删除操作基于data.intent字段过滤,但如果该字段没有创建索引,会触发全集合扫描。当集合数据量较大时,扫描过程会超出超时阈值。可以创建对应索引:db.trainingData.createIndex({"data.intent": 1})单次删除文档量过大
CosmosDB单操作默认超时为60秒,一次性删除大量文档会触发超时。建议分批删除,控制每次删除的文档数量:let batchSize = 1000; let totalDeleted = 0; while (true) { const deleteResult = db.trainingData.deleteMany( {"data.intent": "FIN INTENTION STANDARD"}, {limit: batchSize} ); totalDeleted += deleteResult.deletedCount; if (deleteResult.deletedCount === 0) break; print(`已删除 ${totalDeleted} 条文档...`); } print(`总计删除 ${totalDeleted} 条文档`);网络与区域延迟
如果客户端与CosmosDB实例不在同一Azure区域,跨区域网络延迟会增加操作耗时。确认客户端所在区域,优先选择与实例相同的区域访问。后台资源占用
检查Azure门户中CosmosDB的监控指标(如CPU使用率、请求单位(RU)消耗),确认是否有后台操作(如索引重建、备份)占用大量资源,导致删除操作无法获取足够资源完成。调整客户端超时参数
默认MongoDB客户端的超时设置可能过短,可在连接时延长超时时间:mongo <connection-string> --eval 'db.trainingData.deleteMany({"data.intent": "FIN INTENTION STANDARD"})' --connectTimeoutMS 120000 --socketTimeoutMS 120000
内容的提问来源于stack exchange,提问作者Elouan Keryell-Even
相关产品推荐
相关产品推荐

