有时,MongoDB 中的操作会失控,最终可能会运行数百秒,并会影响性能,直到它们被终止或完成。
发生这种情况时,我知道我可以killOp()
使用,但是如何只杀死目标长时间运行的操作而不杀死(例如)复制中涉及的长时间运行的操作(这可能很危险)?
有时,MongoDB 中的操作会失控,最终可能会运行数百秒,并会影响性能,直到它们被终止或完成。
发生这种情况时,我知道我可以killOp()
使用,但是如何只杀死目标长时间运行的操作而不杀死(例如)复制中涉及的长时间运行的操作(这可能很危险)?
这可能有点棘手,但 MongoDB shell 基本上是一个 Javascript 解释器这一事实为我们提供了不错的过滤选项。这是我用来完成此任务的函数:
这只会杀死高于
maxSecsRunning
阈值的查询,并且不会触及针对local
数据库运行的任何内容,这是数据库的oplog
生命所在(因此是长期运行的复制操作中涉及的数据库。将条件添加到内部if
条件相对容易根据具体需求,更准确地定位操作。该代码也可作为要点提供(我会记得不断更新它)。