mongoDB更新查询耗时太长

时间:2017-03-31 12:04:55

标签: mongodb insert-update

我们有一个分片集群,有4个mongos,3个配置和两个分片(每个分片有3个成员副本集)。所有mongo实例都在3.2版本上。

我们有一个及时的工作,每5分钟运行一次(如果不存在则插入;如果存在则更新)大约16K记录在一个目前有1.5亿条记录的集合中。这个系列从过去几年开始维护,每天新插入约20k。

直到最后一天(昨天),这个更新过程只用了30-35秒。但现在观察到这个更新时间突然增加到大约110秒。

我们使用以下方法来跟踪原因但无法找到根本原因 -

  1. 配置服务器同步。 (配置服务器上的db.runCommand('dbhash'))
  2. 此时间窗口内未添加/更改其他操作/作业。
  3. 未修改任何副本集或群集配置。
  4. 平衡器按预期进行并释放锁定。
  5. 目标收集几乎平均分配在两个碎片上(一个是7300万个,另一个是7700万个)
  6. 所有Linux机器上的平均负载均低于1.0。
  7. 我们陷入困境,无法找到脚本时间突然发生的原因。非常感谢任何帮助。

    插入和更新代码 -

        //dataMap is a hashMap containing all parameters.
        UpdateOptions updateOptions = new UpdateOptions().upsert(true);
        Document updateObject = new Document("$setOnInsert",new Document("cat", dataMap.get("cat"))
                                .append("$set", new Document("timeStamp",dataMap.get("timeStamp"))));
        Document query = new Document("host",dataMap.get("host"));                              
        query.append("timeStamp",dataMap.get(timeStamp));
        // collectionObject below is object of MongoCollection<Document>
        collectionObject.updateOne(query, updateObject, updateOptions);
    

    谢谢和问候,

    Vibhav

    PS - 如果有人选择对此问题进行投票,请在评论中提及原因。

0 个答案:

没有答案