Navigation
This is an upcoming (i.e. in progress) version of the manual.

currentOp

Definition

currentOp

Returns a document that contains information on in-progress operations for the mongod instance.

currentOp has the following form:

{ currentOp: 1 }

The mongo shell provides the db.currentOp() wrapper for the currentOp command.

Note

Because currentOp command and db.currentOp() helper returns the results in a single document, the total size of the currentOp result set is subject to the maximum 16MB BSON size limit for documents.

Starting in version 3.6, MongoDB provides $currentOp aggregation stage. The $currentOp stage returns a cursor over a stream of documents, each of which reports a single operation. Each operation document is subject to the 16MB BSON limit, but unlike the currentOp command, there is no limit on the overall size of the result set.

For this reason, the $currentOp aggregation stage is preferred over the currentOp command and its mongo shell helper db.currentOp().

Behavior

currentOp must run against the admin database, and it can accept several optional fields.

Field Description
"$ownOps"

Boolean. If set to true, returns information on the current user’s operations only.

On mongod instances, users are always authorized to run currentOp with "$ownOps": true to view their own operations. See access control.

New in version 3.2.9.

"$all"

Boolean. If set to true, returns information on all operations, including operations on idle connections and system operations.

"$all": true overrides any output field filters.

<filter> Specify filter conditions on the Output Fields. See Examples.

currentOp and the database profiler report the same basic diagnostic information for all CRUD operations, including the following:

These operations are also included in the logging of slow queries (see slowOpThresholdMs for more information about slow query logging).

Access Control

On systems running with authorization, the user must have access that includes the inprog privilege action.

Changed in version 3.2.9: On mongod instances, users can use $ownOps to view their own operations without the inprog privilege action.

db.adminCommand( { currentOp: 1, "$ownOps": 1 } )

Examples

The following examples use the currentOp command with various query documents to filter the output.

Display All Current Operations

db.adminCommand(
   {
     currentOp: true,
     "$all": true
   }
)

Write Operations Waiting for a Lock

The following example returns information on all write operations that are waiting for a lock:

db.adminCommand(
   {
     currentOp: true,
     "waitingForLock" : true,
     $or: [
        { "op" : { "$in" : [ "insert", "update", "remove" ] } },
        { "query.findandmodify": { $exists: true } }
    ]
   }
)

Active Operations with no Yields

The following example returns information on all active running operations that have never yielded:

db.adminCommand(
   {
     currentOp: true,
     "active" : true,
     "numYields" : 0,
     "waitingForLock" : false
   }
)

Active Operations on a Specific Database

The following example returns information on all active operations for database db1 that have been running longer than 3 seconds:

db.adminCommand(
   {
     currentOp: true,
     "active" : true,
     "secs_running" : { "$gt" : 3 },
     "ns" : /^db1\./
   }
)

Active Indexing Operations

The following example returns information on index creation operations:

db.adminCommand(
    {
      currentOp: true,
      $or: [
        { op: "command", "query.createIndexes": { $exists: true } },
        { op: "none", ns: /\.system\.indexes\b/ }
      ]
    }
)

Output Example

The following is a prototype of the currentOp output when run on a standalone:

Changed in version 4.2.

{
  "inprog": [
       {
         "type" : <string>,
         "host" : <string>,
         "desc" : <string>,
         "connectionId" : <number>,
         "client" : <string>,
         "appName" : <string>,
         "clientMetadata" : <document>,
         "active" : <boolean>,
         "currentOpTime" : <string>,
         "effectiveUsers" : [
            {
               "user" : <string>,
               "db" : <string>
            }
         ],
         "opid" : <number>,
         "secs_running" : <NumberLong()>,
         "microsecs_running" : <number>,
         "op" : <string>,
         "ns" : <string>,
         "command" : <document>,
         "planSummary": <string>,
         "cursor" : {                              // only for getMore operations
            "cursorId" : <NumberLong()>,
            "createdDate" : <ISODate()>,
            "lastAccessDate" : <ISODate()>,
            "nDocsReturned" : <NumberLong()>,
            "nBatchesReturned" : <NumberLong()>,
            "noCursorTimeout" : <boolean>,
            "tailable" : <boolean>,
            "awaitData" : <boolean>,
            "originatingCommand" : <document>,
            "planSummary" : <string>,
            "operationUsingCursorId" : <NumberLong()>
         },
         "msg": <string>,
         "progress" : {
             "done" : <number>,
             "total" : <number>
         },
         "killPending" : <boolean>,
         "numYields" : <number>,
         "locks" : {
             "Global" : <string>,
             "Database" : <string>,
             "Collection" : <string>,
             "Metadata" : <string>,
             "oplog" : <string>
         },
         "waitingForLock" : <boolean>,
         "lockStats" : {
             "Global": {
                "acquireCount": {
                   "r": <NumberLong>,
                   "w": <NumberLong>,
                   "R": <NumberLong>,
                   "W": <NumberLong>
                },
                "acquireWaitCount": {
                   "r": <NumberLong>,
                   "w": <NumberLong>,
                   "R": <NumberLong>,
                   "W": <NumberLong>
                },
                "timeAcquiringMicros" : {
                   "r" : NumberLong(0),
                   "w" : NumberLong(0),
                   "R" : NumberLong(0),
                   "W" : NumberLong(0)
                },
                "deadlockCount" : {
                   "r" : NumberLong(0),
                   "w" : NumberLong(0),
                   "R" : NumberLong(0),
                   "W" : NumberLong(0)
                }
             },
             "Database" : {
                ...
             },
             ...
         }
       },
       ...
   ],
   "fsyncLock": <boolean>,
   "info": <string>,
    "ok": <num>
}

The following is a prototype of the currentOp output when run on a primary of a replica set:

Changed in version 4.2.

{
  "inprog": [
       {
         "type" : <string>,
         "host" : <string>,
         "desc" : <string>,
         "connectionId" : <number>,
         "client" : <string>,
         "appName" : <string>,
         "clientMetadata" : <document>,
         "lsid" : {
            "id" : <UUID>,
            "uid" : <BinData>
         },
         "transaction" : {
            "parameters" : {
               "txnNumber" : <NumberLong()>,
               "autocommit" : <boolean>,
               "readConcern" : {
                  "level" : <string>
               }
            },
            "readTimestamp" : <Timestamp>,
            "startWallClockTime" : <string>,
            "timeOpenMicros" : <NumberLong()>,
            "timeActiveMicros" : <NumberLong()>,
            "timeInactiveMicros" : <NumberLong()>,
            "expiryTime" : <string>,
         },
         "active" : <boolean>,
         "currentOpTime" : <string>,
         "effectiveUsers" : [
            {
               "user" : <string>,
               "db" : <string>
            }
         ],
         "opid" : <number>,
         "secs_running" : <NumberLong()>,
         "microsecs_running" : <number>,
         "op" : <string>,
         "ns" : <string>,
         "command" : <document>,
         "originatingCommand" : <document>,
         "planSummary": <string>,
         "prepareReadConflicts" : <NumberLong()>,
         "writeConflicts" : <NumberLong()>,
         "cursor" : {                              // only for getMore operations
            "cursorId" : <NumberLong()>,
            "createdDate" : <ISODate()>,
            "lastAccessDate" : <ISODate()>,
            "nDocsReturned" : <NumberLong()>,
            "nBatchesReturned" : <NumberLong()>,
            "noCursorTimeout" : <boolean>,
            "tailable" : <boolean>,
            "awaitData" : <boolean>,
            "originatingCommand" : <document>,
            "planSummary" : <string>,
            "operationUsingCursorId" : <NumberLong()>
         },
         "msg": <string>,
         "progress" : {
             "done" : <number>,
             "total" : <number>
         },
         "killPending" : <boolean>,
         "numYields" : <number>,
         "locks" : {
             "Global" : <string>,
             "Database" : <string>,
             "Collection" : <string>,
             "Metadata" : <string>,
             "oplog" : <string>
         },
         "waitingForLock" : <boolean>,
         "lockStats" : {
             "Global": {
                "acquireCount": {
                   "r": <NumberLong>,
                   "w": <NumberLong>,
                   "R": <NumberLong>,
                   "W": <NumberLong>
                },
                "acquireWaitCount": {
                   "r": <NumberLong>,
                   "w": <NumberLong>,
                   "R": <NumberLong>,
                   "W": <NumberLong>
                },
                "timeAcquiringMicros" : {
                   "r" : NumberLong(0),
                   "w" : NumberLong(0),
                   "R" : NumberLong(0),
                   "W" : NumberLong(0)
                },
                "deadlockCount" : {
                   "r" : NumberLong(0),
                   "w" : NumberLong(0),
                   "R" : NumberLong(0),
                   "W" : NumberLong(0)
                }
             },
             "Database" : {
                ...
             },
             ...
         }
       },
       ...
   ],
   "fsyncLock": <boolean>,
   "info": <string>,
   "ok": <num>,
   "operationTime": <timestamp>,
   "$clusterTime": <document>
}

The following is a prototype of the currentOp output when run on a mongos of a sharded cluster:

Changed in version 4.2.

{
  "inprog": [
       {
         "shard": <string>,
         "type" : <string>,
         "host" : <string>,
         "desc" : <string>,
         "connectionId" : <number>,
         "client_s" : <string>,
         "appName" : <string>,
         "clientMetadata" : <document>,
         "active" : <boolean>,
         "currentOpTime" : <string>,
         "effectiveUsers" : [
            {
               "user" : <string>,
               "db" : <string>
            }
         ],
         "userImpersonators" : [
            {
               "user" : <string>,
               "db" : <string>
            }
         ],
         "opid" : <string>,
         "secs_running" : <NumberLong()>,
         "microsecs_running" : <number>,
         "op" : <string>,
         "ns" : <string>,
         "command" : <document>,
         "planSummary": <string>,
         "prepareReadConflicts" : <NumberLong()>,
         "writeConflicts" : <NumberLong()>,
         "cursor" : {                              // only for getMore operations
            "cursorId" : <NumberLong()>,
            "createdDate" : <ISODate()>,
            "lastAccessDate" : <ISODate()>,
            "nDocsReturned" : <NumberLong()>,
            "nBatchesReturned" : <NumberLong()>,
            "noCursorTimeout" : <boolean>,
            "tailable" : <boolean>,
            "awaitData" : <boolean>,
            "originatingCommand" : <document>,
            "planSummary" : <string>,
            "operationUsingCursorId" : <NumberLong()>
         },
         "msg": <string>,
         "progress" : {
             "done" : <number>,
             "total" : <number>
         },
         "killPending" : <boolean>,
         "numYields" : <number>,
         "locks" : {
             "Global" : <string>,
             "Database" : <string>,
             "Collection" : <string>,
             "Metadata" : <string>,
             "oplog" : <string>
         },
         "waitingForLock" : <boolean>,
         "lockStats" : {
             "Global": {
                "acquireCount": {
                   "r": <NumberLong>,
                   "w": <NumberLong>,
                   "R": <NumberLong>,
                   "W": <NumberLong>
                },
                "acquireWaitCount": {
                   "r": <NumberLong>,
                   "w": <NumberLong>,
                   "R": <NumberLong>,
                   "W": <NumberLong>
                },
                "timeAcquiringMicros" : {
                   "r" : NumberLong(0),
                   "w" : NumberLong(0),
                   "R" : NumberLong(0),
                   "W" : NumberLong(0)
                },
                "deadlockCount" : {
                   "r" : NumberLong(0),
                   "w" : NumberLong(0),
                   "R" : NumberLong(0),
                   "W" : NumberLong(0)
                }
             },
             "Database" : {
                ...
             },
             ...
         }
       },
       ...
   ],
  "ok": <num>,
  "operationTime": <timestamp>,
  "$clusterTime": <document>
}

Output Fields

currentOp.type

New in version 4.2.

The type of operation. Values are either:

  • op
  • idleSession
  • idleCursor

If the currentOp.type is op, currentOp.op provides details on the specific operation.

currentOp.host

The name of the host against which the operation is run.

currentOp.desc

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

currentOp.connectionId

An identifier for the connection where the operation originated.

currentOp.client

A string with information about where the operation originated.

For multi-document transactions, client stores information about the most recent client to run an operation inside the transaction.

currentOp.appName

A string with information about the type of client which made the request.

currentOp.clientMetadata

Additional information on the client.

For multi-document transactions, client stores information about the most recent client to run an operation inside the transaction.

currentOp.currentOpTime

The start time of the operation.

New in version 3.6.

currentOp.effectiveUsers

An array that contains a document for each user associated with the operation. Each user document contains the user name and the authentication db.

See also

currentOp.impersonatedUsers

New in version 4.2.

currentOp.userImpersonators

An array that contains a document for each user who is impersonating the effectiveUser(s) for the operation. The user impersonator document contains the user name and the authentication db. In general, the impersonating user is the __system user; e.g.

"userImpersonators" : [
   {
      "user" : "__system",
      "db" : "local"
   }
]

Only available on sharded clusters

New in version 4.2.

currentOp.lsid

The session identifier.

Only present if the operation is associated with a session.

New in version 3.6.

currentOp.transaction

A document that contains multi-document transaction information.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.

currentOp.transaction.parameters

A document that contains information on multi-document transaction.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.

currentOp.transaction.parameters.txnNumber

The transaction number.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.

currentOp.transaction.parameters.autocommit

A boolean flag that indicates if autocommit is on for the transaction.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

currentOp.transaction.parameters.readConcern

The read concern for the transaction.

Multi-document transactions support read concern "snapshot", "local", and "majority".

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

currentOp.transaction.readTimestamp

The timestamp of the snapshot being read by the operations in the transaction.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

currentOp.transaction.startWallClockTime

The date and time (with time zone) of the transaction start.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

currentOp.transaction.timeOpenMicros

The duration of the transaction in microseconds.

The timeActiveMicros value added to the timeInactiveMicros should equal the timeOpenMicros.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

currentOp.transaction.timeActiveMicros

The total amount of time that the transaction has been active; i.e. when the transaction had operations running.

The timeActiveMicros value added to the timeInactiveMicros should equal the timeOpenMicros.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

currentOp.transaction.timeInactiveMicros

The total amount of time that the transaction has been inactive; i.e. when the transaction had no operations running.

The timeInactiveMicros value added to the timeActiveMicros should equal the timeOpenMicros.

Only present if the operation is part of a multi-document transaction.

currentOp.transaction.expiryTime

The date and time (with time zone) when the transaction will time out and abort.

The currentOp.transaction.expiryTime equals the currentOp.transaction.startWallClockTime + the transactionLifetimeLimitSeconds.

For more information, seee Runtime Limit for transactions.

Only present if the operation is part of a multi-document transaction.

New in version 4.0.2.

currentOp.opid

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

Warning

Terminate running operations with extreme caution. Only use db.killOp() to terminate operations initiated by clients and do not terminate internal database operations.

currentOp.active

A boolean value specifying whether the operation has started. Value is true if the operation has started or false if the operation is idle, such as an idle connection or an internal thread that is currently idle. An operation can be active even if the operation has yielded to another operation.

Changed in version 3.0: For some inactive background threads, such as an inactive signalProcessingThread, MongoDB suppresses various empty fields.

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.

Only appears if the operation is running; i.e. if active is true.

currentOp.microsecs_running

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

Only appears if the operation is running; i.e. if active is true.

currentOp.op

A string that identifies the specific operation type. Only present if currentOp.type is op.

The possible values are:

  • "none"
  • "update"
  • "insert"
  • "query"
  • "command"
  • "getmore"
  • "remove"
  • "killcursors"

"query" operations include read operations.

"command" operations include most commands such as the createIndexes and findandmodify.

Changed in version 3.0: Write operations that use the insert, update, and delete commands respectively display "insert", "update", and "remove" for op. Previous versions include these write commands under "query" operations.

Changed in version 3.2: Most commands including createIndexes and findandmodify display "command" for op. Previous versions of MongoDB included these commands under "query" operations.

currentOp.ns

The namespace the operation targets. A namespace consists of the database name and the collection name concatenated with a dot (.); that is, "<database>.<collection>".

currentOp.command

Changed in version 3.6.

A document containing the full command object associated with this operation.

For example, the following output contains the command object for a find operation on a collection named items in a database named test:

"command" : {
  "find" : "items",
  "filter" : {
    "sku" : 1403978
  },
  ...
  "$db" : "test"
}

The following example output contains the command object for a getMore operation generated by a command with cursor id 19234103609 on a collection named items in a database named test:

"command" : {
    "getMore" : NumberLong("19234103609"),
    "collection" : "items",
    "batchSize" : 10,
    ...
    "$db" : "test"
},

If the command document exceeds 1 kilobyte, the document has the following form:

"command" : {
  "$truncated": <string>,
  "comment": <string>
}

The $truncated field contains a string summary of the document excluding the document’s comment field if present. If the summary still exceeds 1 kilobyte then it is further truncated, denoted by an ellipsis (…) at the end of the string.

The comment field is present if a comment was passed to the operation.

currentOp.planSummary

Specifies whether the cursor uses a collection scan (COLLSCAN) or an index scan (IXSCAN { ... }).

The IXSCAN also includes the specification document of the index used.

currentOp.prepareReadConflicts

The number of times the current operation had to wait for a prepared transaction with a write to commit or abort.

While waiting, the current operation continues to hold any necessary locks and storage engine resources.

New in version 4.2.

currentOp.writeConflicts

The number of times the current operation conflicted with another write operation on the same document.

New in version 4.2.

currentOp.cursor

New in version 4.2.

A document that contains the cursor information for getmore operations; i.e. where op is getmore.

If reporting on a getmore operation before the getmore has accessed its cursor information, the cursor field is not available.

currentOp.cursor.cursorId

New in version 4.2.

The id of the cursor.

currentOp.cursor.createdDate

New in version 4.2.

The date and time when the cursor was created.

currentOp.cursor.lastAccessDate

New in version 4.2.

The date and time when the cursor was last used.

currentOp.cursor.nDocsReturned

New in version 4.2.

The cumulative number of documents returned by the cursor.

currentOp.cursor.nBatchesReturned

New in version 4.2.

The curmulative number of batches returned by the cursor.

currentOp.cursor.noCursorTimeout

New in version 4.2.

The flag that indicates that the cursor will not timeout when idle; i.e. if the cursor has the noTimeout option set.

  • If true, the cursor does not time out when idle.
  • If false, the cursor will time out when idle.
currentOp.cursor.tailable

New in version 4.2.

The flag that indicates if the cursor is a tailable cursor for a capped collection. Tailable cursors remain open after the client exhausts the results in the initial cursor.

currentOp.cursor.awaitData

New in version 4.2.

The flag that indicates whether the tailable cursor should temporarily block a getMore command on the cursor while waiting for new data rather than returning no data.

For non-tailable cursors, the value is always false.

currentOp.cursor.originatingCommand

New in version 4.2.

The originatingCommand field contains the full command object (e.g. find or aggregate) which originally created the cursor.

Note

Starting in version 4.2, MongoDB now returns originatingCommand field as a nested field in the new cursor field. In previous versions, the originatingCommand was a top-level field for the associated "getmore" document.

currentOp.cursor.planSummary

New in version 4.2.

Specifies whether the cursor uses a collection scan (COLLSCAN) or an index scan (IXSCAN { ... }).

The IXSCAN also includes the specification document of the index used.

currentOp.cursor.operationUsingCursorId

New in version 4.2.

The opid of the operation using the cursor.

Only present if the cursor is not idle.

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.

currentOp.appName

New in version 3.4.

The identifier of the client application which ran the operation. Use the appName connection string option to set a custom value for the appName field.

currentOp.locks

Changed in version 3.0.

The locks document reports the type and mode of locks the operation currently holds. The possible lock types are as follows:

Lock Type Description
Global Represents global lock.
Database Represents database lock.
Collection Represents collection lock.
Metadata Represents metadata lock.
oplog Represents lock on the oplog.

The possible modes are as follows:

Lock Mode Description
R Represents Shared (S) lock.
W Represents Exclusive (X) lock.
r Represents Intent Shared (IS) lock.
w Represents Intent Exclusive (IX) lock.
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.killPending

Returns true if the operation is currently flagged for termination. When the operation encounters its next safe termination point, the operation will terminate.

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.fsyncLock

Specifies if database is currently locked for fsync write/snapshot.

Only appears if locked; i.e. if fsyncLock is true.

currentOp.info

Information regarding how to unlock database from db.fsyncLock(). Only appears if fsyncLock is true.

currentOp.lockStats

For each lock type and mode (see currentOp.locks for descriptions of lock types and modes), returns the following information:

currentOp.lockStats.acquireCount

Number of times the operation acquired the lock in the specified mode.

currentOp.lockStats.acquireWaitCount

Number of times the operation had to wait for the acquireCount lock acquisitions because the locks were held in a conflicting mode. acquireWaitCount is less than or equal to acquireCount.

currentOp.lockStats.timeAcquiringMicros

Cumulative time in microseconds that the operation had to wait to acquire the locks.

timeAcquiringMicros divided by acquireWaitCount gives an approximate average wait time for the particular lock mode.

currentOp.lockStats.deadlockCount

Number of times the operation encountered deadlocks while waiting for lock acquisitions.

←   createIndexes drop  →