终止正在运行的操作
Overview
MongoDB提供了两种方法来终止运行的操作: maxTimeMS()
和db.killOp()
。 根据需要使用这些操作来控制MongoDB 部署中的操作行为。
可用程序
maxTimeMS
maxTimeMS()
方法设置了操作的时间限制。当操作达到指定时间限制时,MongoDB 会在下一个中断点中断操作。
终止查询
从 mongosh
开始,使用以下方法为此查询设置30毫秒的时间限制:
db.location.find( { "town": { "$regex": "(Pine Lumber)", "$options": 'i' } } ).maxTimeMS(30)
终止命令
考虑一个可能长时间运行的操作,使用 distinct
返回具有 city
键的每个不同的 collection
字段:
db.runCommand( { distinct: "collection", key: "city" } )
您可以将 maxTimeMS
字段添加到命令文档中,以便将操作的时间限制设置为 45 毫秒:
db.runCommand( { distinct: "collection", key: "city", maxTimeMS: 45 } )
到达 maxTimeMS
的操作将返回 MaxTimeMSExpired
错误。
killOp
db.killOp()
方法在下一个中断点中断正在运行的操作。db.killOp()
按操作 ID 标识目标操作。
db.killOp(<opId>)
警告
终止正在运行的操作时要格外小心。仅使用 db.killOp()
来终止客户端发起的操作,而不会终止数据库内部操作。
分片集群
killOp
命令可在 mongos
上运行,并可终止跨越集群分片的查询(即读取操作)。当要终止的操作是写操作时,mongos
的 killOp
命令不会传播到分片。
有关针对分片集群的终止操作的更多信息,请参阅:
有关如何列出 mongos
上活动的分片操作的信息,请参阅 $currentOp
中的 localOps
参数。