数据库探查器输出

在本页面

数据库探查器捕获有关读取和写入操作,游标操作和数据库命令的数据信息。要配置数据库概要文件并设置捕获概要文件数据的阈值,请参阅Database Profiler部分。

数据库分析器将数据写入system.profile集合(即capped collection)中。要查看事件探查器的输出,请对system.profile集合使用普通的 MongoDB 查询。

Note

因为数据库探查器会将数据写入数据库中的system.profile集合,所以探查器将对某些写活动进行探查,即使对于原本为只读的数据库也是如此。

在版本 3.4 中更改。

currentOpdatabase profiler报告所有 CRUD 操作的相同基本诊断信息,包括以下内容:

这些操作也包含在慢查询的日志 Logging(有关慢查询的日志的更多信息,请参见slowOpThresholdMs)。

system.profile 文件示例

system.profile集合中的文档具有以下格式。此示例文档反映了对独立 mongod 的查找操作:

{
   "op" : "query",
   "ns" : "test.c",
   "command" : {
      "find" : "c",
      "filter" : {
         "a" : 1
      },
      "$clusterTime" : {
            "clusterTime" : Timestamp(1516119535, 1),
            "signature" : {
               "hash" : BinData(0,"h6fRyauI8KAejCbq4DvwvJAoJ1s="),
               "keyId" : NumberLong("6511683304255651841")
            }
      },
      "$db" : "test"
   },
   "keysExamined" : 2,
   "docsExamined" : 2,
   "cursorExhausted" : true,
   "numYield" : 0,
   "locks" : {
      "Global" : {
         "acquireCount" : {
            "r" : NumberLong(2)
         }
      },
      "Database" : {
         "acquireCount" : {
            "r" : NumberLong(1)
         }
      },
      "Collection" : {
         "acquireCount" : {
            "r" : NumberLong(1)
         }
      }
   },
   "nreturned" : 2,
   "responseLength" : 108,
   "protocol" : "op_msg",
   "millis" : 0,
   "planSummary" : "IXSCAN { a: 1 }",
   "execStats" : {
      "stage" : "FETCH",
      "nReturned" : 2,
      "executionTimeMillisEstimate" : 0,
      "works" : 3,
      "advanced" : 2,
      "needTime" : 0,
      "needYield" : 0,
      "saveState" : 0,
      "restoreState" : 0,
      "isEOF" : 1,
      "invalidates" : 0,
      "docsExamined" : 2,
      "alreadyHasObj" : 0,
      "inputStage" : {
         "stage" : "IXSCAN",
         "nReturned" : 2,
         "executionTimeMillisEstimate" : 0,
         "works" : 3,
         "advanced" : 2,
         "needTime" : 0,
         "needYield" : 0,
         "saveState" : 0,
         "restoreState" : 0,
         "isEOF" : 1,
         "invalidates" : 0,
         "keyPattern" : {
            "a" : 1
         },
         "indexName" : "a_1",
         "isMultiKey" : false,
         "multiKeyPaths" : {
            "a" : [ ]
         },
         "isUnique" : false,
         "isSparse" : false,
         "isPartial" : false,
         "indexVersion" : 1,
         "direction" : "forward",
         "indexBounds" : {
            "a" : [
               "[1.0, 1.0]"
            ]
         },
         "keysExamined" : 2,
         "seeks" : 1,
         "dupsTested" : 0,
         "dupsDropped" : 0,
         "seenInvalidated" : 0
      }
   },
   "ts" : ISODate("2015-09-03T15:26:14.948Z"),
   "client" : "127.0.0.1",
   "appName" : "MongoDB Shell",
   "allUsers" : [
         {
            "user" : "report1",
            "db" : "test"
         }
      ],
      "user" : "report1@test"
}

updatedelete的配置文件条目包含应用于命名集合的整个更新/删除文档。多个更新/删除文档将为每个文档生成一个配置文件条目。

以下示例反映了对名为c的集合的单个update操作。

{
   "op" : "update",
   "ns" : "test.c",
   "command" : {
      "q" : {
         "a" : 1
      },
      "u" : {
         "$set" : {
            "b" : 2
         }
      },
      "multi" : false,
      "upsert" : false
   },
   "keysExamined" : 2,
   "docsExamined" : 2,
   "nMatched" : 1,
   "nModified" : 1,
   ...
}

Output Reference

对于任何单个操作,由数据库探查器创建的文档将包括以下字段的子集。这些文档中字段的准确选择取决于操作的类型。

在 3.2.0 版中进行了更改:system.profile.query.skip替换了system.profile.ntoskip字段。

在版本 3.2.0 中更改:system.profile.ntoreturn字段中的信息已由两个单独的字段system.profile.query.limitsystem.profile.query.batchSize代替。较旧的驱动程序或mongo shell 的较旧版本仍可以使用ntoreturn;这将显示为system.profile.query.ntoreturn

Note

有关特定于您的 MongoDB 版本的输出,请参阅相应版本的《 MongoDB 手册》。

  • system.profile. op

    • 操作类型。可能的值为:
  • command

  • count

  • distinct

  • geoNear

  • getMore

  • group

  • insert

  • mapReduce

  • query

  • remove

  • update

  • system.profile. ns

  • system.profile. command

    • 在版本 3.6 中更改。

包含与此操作关联的完整命令对象的文档。如果命令文档超过 50 KB,则该文档具有以下格式:

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

$truncated字段包含文档的字符串摘要,但不包括文档的comment字段(如果存在)。如果摘要仍超过 50 KB,则将其进一步截断,并在字符串末尾用省略号(...)表示。

如果向操作传递了 Comments,则comment字段存在。

以下示例输出包含对名为test的数据库中名为items的集合进行find操作的命令对象:

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

以下示例输出包含由test的数据库中名为items的集合上的光标 ID 80336119321的命令所生成的getMore操作的命令对象:

"command" : {
  "getMore" : NumberLong("80336119321"),
  "collection" : "items",
  "$db" : "test"
}
  • system.profile. originatingCommand

    • 在版本 3.6 中进行了更改:对于用于从游标检索下一批结果的"getmore"操作,originatingCommand字段包含最初创建该游标的完整命令对象(例如findaggregate)。
  • system.profile. cursorid

    • querygetmore操作访问的光标的 ID。
  • system.profile. keysExamined

    • 在版本 3.2.0 中进行了更改。

system.profile.nscanned重命名。 MongoDB 扫描以执行该操作的index键的数量。

通常,如果keysExamined远高于nreturned,则数据库将扫描许多索引键以查找结果文档。考虑创建或调整索引以提高查询性能。

在版本 3.4 中更改。

keysExamined可用于以下命令和操作:

MongoDB 扫描以执行操作的集合中的文档数。

在版本 3.4 中更改。

docsExamined可用于以下命令和操作:

在 3.0.0 版中更改:仅在使用 MMAPv1 存储引擎时出现。

当更新操作将一个或多个文档移动到磁盘上的新位置时,此字段的值为true。如果该操作未导致移动,则不会出现此字段。导致移动的操作要比就地更新花费更多的时间,并且通常是由于文档增长而发生的。

  • system.profile. nmoved
    • 在 3.0.0 版中更改:仅在使用 MMAPv1 存储引擎时出现。

操作在磁盘上移动的文档数。仅当操作导致移动时,此字段才会出现。该字段的隐式值为零,并且仅当非零时才存在该字段。

  • system.profile. hasSortStage
    • 在版本 3.2.0 中更改:从system.profile.scanAndOrder重命名。

hasSortStage是布尔值,是true,当查询 不能 使用索引中的 Sequences 返回所请求的排序结果时;即 MongoDB 在从游标接收到文档后必须对文档进行排序。该字段仅在值为true时出现。

在版本 3.4 中更改。

hasSortStage可用于以下命令和操作:

与更新操作的system.profile.query条件匹配的文档数。

  • system.profile. nModified
    • 2.6 版的新功能。

通过更新操作修改的文档数。

  • system.profile. upsert

    • 指示更新操作的upsert选项值的布尔值。仅在upsert为 true 时显示。
  • system.profile. fastmodinsert

    • 自 3.4 版起不推荐使用。

记录符合以下所有条件的更新操作数:

  • 是 upserts(导致插入)

  • 不要使用修饰符操作,例如$set

  • system.profile. fromMultiPlanner

    • 3.2.5 版中的新功能。

一个布尔值,指示查询计划者在选择查询的获胜执行计划之前是否评估了多个计划。

仅在 value 为true时存在。

  • system.profile. replanned
    • 3.2.5 版中的新功能。

一个布尔值,指示查询系统是否收回了缓存的计划并重新评估了所有候选计划。

仅在 value 为true时存在。

  • system.profile. keysInserted

    • 为给定的写操作插入的索引键的数量。
  • system.profile. keysDeleted

    • 从 3.4 中删除

操作中更新的index键数已更改。更改索引键会降低性能成本,因为数据库必须删除旧键并将新键插入 B 树索引。

  • system.profile. writeConflicts
    • 3.0.0 版中的新功能。

写操作期间遇到的冲突数;例如update操作尝试与另一个update操作修改同一文档。另请参见write conflict

  • system.profile. numYield

    • 操作产生的允许其他操作完成的次数。通常,操作在需要访问 MongoDB 尚未完全读入内存的数据时产生。这样,在 MongoDB 读取数据进行 yield 操作的同时,可以完成内存中具有数据的其他操作。有关更多信息,请参见有关何时产生收益的常见问题解答
  • system.profile. locks

    • 3.0.0 版中的新功能:locks替换了lockStats字段。

system.profile.locks提供有关在操作期间持有的各种锁定类型和锁定模式的信息。

可能的锁定类型为:

Lock TypeDescription
Global代表全局锁定。
MMAPV1Journal表示 MMAPv1 存储引擎特定的锁,用于同步日志写入;对于非 MMAPv1 存储引擎,MMAPV1Journal的模式为空。
Database表示数据库锁定。
Collection表示收集锁。
Metadata表示元数据锁定。
oplog表示锁定oplog

锁定类型的可能锁定模式如下:

Lock ModeDescription
R表示共享(S)锁。
W表示排他(X)锁。
r表示共享意图(IS)锁。
w表示 Intent Exclusive(IX)锁。

返回的各种锁类型的锁信息包括:

  • system.profile.locks. acquireCount

    • 操作在指定模式下获得锁定的次数。
  • system.profile.locks. acquireWaitCount

  • system.profile.locks. timeAcquiringMicros

    • 操作必须 await 以获取锁的累积时间(以微秒为单位)。

timeAcquiringMicros除以acquireWaitCount得出特定锁定模式的平均 await 时间。

  • system.profile.locks. deadlockCount
    • 操作在 await 锁获取时遇到死锁的次数。

有关锁定模式的更多信息,请参见MongoDB 使用哪种类型的锁定?

  • system.profile. nreturned

    • 操作返回的文档数。
  • system.profile. responseLength

    • 运算结果文件的字节长度。较大的responseLength会影响性能。要限制查询操作的结果文档的大小,可以使用以下任一方法:
  • Projections

  • limit()方法

  • batchSize()方法

Note

当 MongoDB 将查询配置文件信息写入日志时,responseLength值位于名为reslen的字段中。

  • system.profile. protocol

  • system.profile. millis

    • 从操作开始到操作结束的mongod角度,以毫秒为单位的时间。
  • system.profile. planSummary

    • 3.4 版的新功能。

执行计划摘要。

  • system.profile. execStats
    • 在版本 3.0 中更改。

包含查询操作执行统计信息的文档。对于其他操作,该值为空文档。

system.profile.execStats将统计信息显示为树形;每个节点提供在查询操作的该阶段执行的操作的统计信息。

Note

execStats的以下字段列表并不详尽,因为返回的字段在每个阶段都不同。

  • system.profile.execStats. stage
    • 3.0 版中的新功能:stage替换了type字段。

作为查询执行的一部分执行的操作的描述性名称;例如

  • COLLSCAN用于集合扫描

  • IXSCAN用于扫描索引键

  • FETCH用于检索文档

  • system.profile.execStats. inputStages

    • 3.0 版中的新功能:inputStages替换了children字段。

一个数组,其中包含作为当前阶段 Importing 阶段的操作的统计信息。

  • system.profile. ts

    • 操作的时间戳。
  • system.profile. client

    • 操作起源的 Client 端连接的 IP 地址或主机名。

对于某些操作,例如db.eval(),Client 端是0.0.0.0:0而不是实际的 Client 端。

  • system.profile. appName
    • 3.4 版的新功能。

运行该操作的 Client 端应用程序的标识符。如果操作在MongoDBShell中运行,则 appName 始终为"MongoDB Shell"。如果操作源自driver,则appName可以设置为自定义字符串。

  • system.profile. allUsers

    • 会话的经过身份验证的用户信息(用户名和数据库)的数组。另请参见Users
  • system.profile. user

    • 运行该操作的经过身份验证的用户。如果操作不是由经过身份验证的用户运行的,则此字段的值为空字符串。