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