终止正在运行的操作
概述
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 参数。