如果发出了一个执行耗时很长的任务给 MongoDB 服务器, 客户端强制终止会导致任务依然在服务器端执行.
这时 MongoDB 提供了查询和管理正在执行任务的方式.
- // db.currentOp() 获得当前的所有 `in progressing` 的操作, 包括 insert/query/update/remove/getmore/command 等
- > db.currentOp(true)
返回的数据结构如下:
- { "inprog" :
- [
- {
- "opid" : 3434473,// 操作的 id
- "active" : <boolean>,// 是否处于活动状态
- "secs_running" : 0,// 操作运行了多少秒
- "op" : "<operation>",// 具体的操作行为, 包括 (insert/query/update/remove/getmore/command)
- "ns" : "<database>.<collection>",// 操作的命名空间, 如: 数据库名. 集合名
- "query" : {// 具体的操作语句
- },
- "client" : "<host>:<outgoing>",// 连接的客户端信息
- "desc" : "conn57683",// 数据库连接描述
- "threadId" : "0x7f04a637b700",// 线程 id
- "connectionId" : 57683,// 数据库连接 id
- "locks" : {// 锁的相关信息
- "^" : "w",
- "^local" : "W",
- "^<database>" : "W"
- },
- "waitingForLock" : false,// 是否在等待并获取锁,
- "msg": "<string>"
- "numYields" : 0,
- "progress" : {
- "done" : <number>,
- "total" : <number>
- }
- "lockStats" : {
- "timeLockedMicros" : {// 此操作获得以下锁后, 把持的微秒时间
- "R" : NumberLong(),// 整个 mongodb 服务实例的全局读锁
- "W" : NumberLong(),// 整个 mongodb 服务实例的全局写锁
- "r" : NumberLong(),// 某个数据库实例的读锁
- "w" : NumberLong() // 某个数据库实例的写锁
- },
- "timeAcquiringMicros" : {// 此操作为了获得以下的锁, 而耗费等待的微秒时间
- "R" : NumberLong(),// 整个 mongodb 服务实例的全局读锁
- "W" : NumberLong(),// 整个 mongodb 服务实例的全局写锁
- "r" : NumberLong(),// 某个数据库实例的读锁
- "w" : NumberLong()// 某个数据库实例的写锁
- }
- }
- },
- .....
- ]
- }
找到其中耗时 secs_running 很长的操作, 有可能是异常操作, 确认后可
- >
- db
- .
- killOp(opid)
来源: http://www.bubuko.com/infodetail-2682125.html