长时间运行的MongoDB查询 - 使用连接指标可以衡量进度吗?

时间:2016-09-03 18:58:06

标签: mongodb mongodb-query

上下文

在名为DeviceLocation2的MongoDB集合上运行删除脚本的过程中。

在执行前拉出指标,有20,192,184个早于2016-06-01的文件将被删除。

删除操作已运行42873秒。

有许多指标显示为当前操作连接“conn1120213”的一部分,如下所示。

问题

我试图弄清楚这些当前运营指标中的任何一个是否能够指示我到目前为止这项工作的进展情况?

显然,我可以对剩余的文件进行计数,但这需要超过24小时。注意.explain用于确保所有操作都符合索引。

操作

remove  {
"DeviceId": {
"$gte": -2147483648
},
"SampleDateTime": {
"$lt": {
  "$date": "2016-06-01T00:00:00.000Z"
}
}
}
{
"desc": "conn1120213",
"threadId": "0x1774ba80",
"connectionId": 1120213,
"opid": 474308850,
"active": true,
"secs_running": 42873,
"microsecs_running": 42873556048,
"op": "remove",
"ns": "DeviceLocation2",
"query": {
"DeviceId": {
  "$gte": -2147483648
},
"SampleDateTime": {
  "$lt": {
    "$date": "2016-06-01T00:00:00.000Z"
  }
}
},
"client": "62.255.27.49:33590",
"numYields": 803758,
"locks": {},
"waitingForLock": false,
"lockStats": {
"Global": {
  "acquireCount": {
    "r": 3408578,
    "w": 3408578
  }
},
"MMAPV1Journal": {
  "acquireCount": {
    "w": 3433949
  },
  "acquireWaitCount": {
    "w": 402551
  },
  "timeAcquiringMicros": {
    "w": 9444549309
  }
},
"Database": {
  "acquireCount": {
    "w": 3408578
  },
  "acquireWaitCount": {
    "w": 88
  },
  "timeAcquiringMicros": {
    "w": 136962266
  }
},
"Collection": {
  "acquireCount": {
    "W": 803758
  },
  "acquireWaitCount": {
    "W": 25285
  },
  "timeAcquiringMicros": {
    "W": 2633178781
  }
},
"oplog": {
  "acquireCount": {
    "w": 2604820
  },
  "acquireWaitCount": {
    "w": 66293
  },
  "timeAcquiringMicros": {
    "w": 15788967730
  }
}
}
}

感谢您的帮助。 斯科特

1 个答案:

答案 0 :(得分:0)

答案似乎是上述指标都没有表明进展。遗憾的是,MongoDB没有内置的跟踪查询/操作进度的方法 - 除了索引构建之外。

这让我失望:

  • 查找/计算要删除的数据,以查看仍有多少文件仍在退回,或尚未删除。如前所述,这非常耗时。

  • 在特定日期点按ID查找预定义的单个文档。事后看来,知道REMOVE日期范围内每天第一份文件的ID可以让我快速查询进度。

  • Mongo报告每个集合的总文档数。通过了解要删除的总数以及在删除操作期间的大约,这可以提供指示性进展。

由于 斯科特