Navigation
This version of the documentation is archived and no longer supported.

Current Operation Reporting

Changed in version 2.2.

Example Output

The db.currentOp() helper in the mongo shell reports on the current operations running on the mongod instance. The operation returns the inprog array, which contains a document for each in progress operation. Consider the following example output:

{
  "inprog": [
             {
                     "opid" : 3434473,
                     "active" : <boolean>,
                     "secs_running" : 0,
                     "op" : "<operation>",
                     "ns" : "<database>.<collection>",
                     "query" : {
                     },
                     "client" : "<host>:<outgoing>",
                     "desc" : "conn57683",
                     "threadId" : "0x7f04a637b700",
                     "connectionId" : 57683,
                     "locks" : {
                             "^" : "w",
                             "^local" : "W",
                             "^<database>" : "W"
                     },
                     "waitingForLock" : false,
                     "msg": "<string>"
                     "numYields" : 0,
                     "progress" : {
                             "done" : <number>,
                             "total" : <number>
                     }
                     "lockStats" : {
                             "timeLockedMicros" : {
                                     "R" : NumberLong(),
                                     "W" : NumberLong(),
                                     "r" : NumberLong(),
                                     "w" : NumberLong()
                             },
                             "timeAcquiringMicros" : {
                                     "R" : NumberLong(),
                                     "W" : NumberLong(),
                                     "r" : NumberLong(),
                                     "w" : NumberLong()
                             }
                     }
             },
            ]
}

Optional

You may specify the true argument to db.currentOp() to return a more verbose output including idle connections and system operations. For example:

db.currentOp(true)

Furthermore, active operations (i.e. where active is true) will return additional fields.

Operations

You can use the db.killOp() in conjunction with the opid field to terminate a currently running operation.

Note

You cannot use db.killOp() to kill a foreground index build.

The following JavaScript operations for the mongo shell filter the output of specific types of operations:

  • Return all pending write operations:

    db.currentOp().inprog.forEach(
       function(d){
         if(d.waitingForLock && d.lockType != "read")
            printjson(d)
         })
    
  • Return the active write operation:

    db.currentOp().inprog.forEach(
       function(d){
         if(d.active && d.lockType == "write")
            printjson(d)
         })
    
  • Return all active read operations:

    db.currentOp().inprog.forEach(
       function(d){
         if(d.active && d.lockType == "read")
            printjson(d)
         })
    

Output Reference

Some fields may not appear in all current operation documents, depending on the kind of operation and its state.

currentOp.opid

Holds an identifier for the operation. You can pass this value to db.killOp() in the mongo shell to terminate the operation.

Note

You cannot use db.killOp() to kill a foreground index build.

currentOp.active

A boolean value, that is true if the operation has started or false if the operation is queued and waiting for a lock to run. active may be true even if the operation has yielded to another operation.

currentOp.secs_running

The duration of the operation in seconds. MongoDB calculates this value by subtracting the current time from the start time of the operation.

If the operation is not running, (i.e. if active is false,) this field may not appear in the output of db.currentOp().

currentOp.op

A string that identifies the type of operation. The possible values are:

  • insert
  • query
  • update
  • remove
  • getmore
  • command
currentOp.ns

The namespace the operation targets. MongoDB forms namespaces using the name of the database and the name of the collection.

currentOp.query

A document containing the current operation’s query. The document is empty for operations that do not have queries: getmore, insert, and command.

currentOp.client

The IP address (or hostname) and the ephemeral port of the client connection where the operation originates. If your inprog array has operations from many different clients, use this string to relate operations to clients.

For some commands, including findAndModify and db.eval(), the client will be 0.0.0.0:0, rather than an actual client.

currentOp.desc

A description of the client. This string includes the connectionId.

currentOp.threadId

An identifier for the thread that services the operation and its connection.

currentOp.connectionId

An identifier for the connection where the operation originated.

currentOp.locks

New in version 2.2.

The locks document reports on the kinds of locks the operation currently holds. The following kinds of locks are possible:

currentOp.locks.^

^ reports on the use of the global lock :for the program:mongod instance. All operations must hold the :global lock for some phases of operation.

currentOp.locks.^local

^local reports on the lock for the local database. MongoDB uses the local database for a number of operations, but the most frequent use of the local database is for the oplog used in replication.

currentOp.locks.^<database>

locks.^<database> reports on the lock state for the database that this operation targets.

locks replaces lockType in earlier versions.

currentOp.lockType

Changed in version 2.2: The locks replaced the lockType field in 2.2.

Identifies the type of lock the operation currently holds. The possible values are:

  • read
  • write
currentOp.waitingForLock

Returns a boolean value. waitingForLock is true if the operation is waiting for a lock and false if the operation has the required lock.

currentOp.msg

The msg provides a message that describes the status and progress of the operation. In the case of indexing or mapReduce operations, the field reports the completion percentage.

currentOp.progress

Reports on the progress of mapReduce or indexing operations. The progress fields corresponds to the completion percentage in the msg field. The progress specifies the following information:

currentOp.progress.done

Reports the number completed.

currentOp.progress.total

Reports the total number.

currentOp.killed

Returns true if mongod instance is in the process of killing the operation.

currentOp.numYields

numYields is a counter that reports the number of times the operation has yielded to allow other operations to complete.

Typically, operations yield when they need access to data that MongoDB has not yet fully read into memory. This allows other operations that have data in memory to complete quickly while MongoDB reads in data for the yielding operation.

currentOp.lockStats

New in version 2.2.

The lockStats document reflects the amount of time the operation has spent both acquiring and holding locks. lockStats reports data on a per-lock type, with the following possible lock types:

  • R represents the global read lock,
  • W represents the global write lock,
  • r represents the database specific read lock, and
  • w represents the database specific write lock.
currentOp.timeLockedMicros

The timeLockedMicros document reports the amount of time the operation has spent holding a specific lock.

For operations that require more than one lock, like those that lock the local database to update the oplog, then the values in this document can be longer than this value may be longer than the total length of the operation (i.e. secs_running.)

currentOp.timeLockedMicros.R

Reports the amount of time in microseconds the operation has held the global read lock.

currentOp.timeLockedMicros.W

Reports the amount of time in microseconds the operation has held the global write lock.

currentOp.timeLockedMicros.r

Reports the amount of time in microseconds the operation has held the database specific read lock.

currentOp.timeLockedMicros.w

Reports the amount of time in microseconds the operation has held the database specific write lock.

currentOp.timeAcquiringMicros

The timeAcquiringMicros document reports the amount of time the operation has spent waiting to acquire a specific lock.

currentOp.timeAcquiringMicros.R

Reports the mount of time in microseconds the operation has waited for the global read lock.

currentOp.timeAcquiringMicros.W

Reports the mount of time in microseconds the operation has waited for the global write lock.

currentOp.timeAcquiringMicros.r

Reports the mount of time in microseconds the operation has waited for the database specific read lock.

currentOp.timeAcquiringMicros.w

Reports the mount of time in microseconds the operation has waited for the database specific write lock.