文档菜单
文档首页
/
MongoDB 手册
/ / / / /

数据库分析器输出

本页内容

  • 输出字段
  • 示例system.profile 文档

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

数据库分析器将数据写入system.profile集合,这是一个受限集合。要查看分析器的输出,请在system.profile集合上使用正常的MongoDB查询。

注意

由于数据库分析器将数据写入数据库中的system.profile集合,因此即使对于其他情况下只读的数据库,分析器也会对某些写入活动进行分析。

currentOp和数据库分析器报告了CRUD操作相同的诊断信息,包括以下内容

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

当使用可查询加密时,对加密集合的CRUD操作将从system.profile集合中省略。有关详细信息,请参阅裁剪。

事务内部,无法对system.profile集合执行任何操作,包括读取。

警告

请勿尝试创建名为system.profile的时间序列集合或视图。MongoDB 6.3及更高版本在尝试这样做时会返回一个IllegalOperation错误。更早的MongoDB版本会崩溃。

对于任何单个操作,数据库分析器创建的文档包含以下字段的子集。这些文档中字段的精确选择取决于操作类型。

注意

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

system.profile.op

操作类型。可能的值包括

  • 命令

  • 计数

  • distinct

  • geoNear

  • getMore

  • group

  • 插入

  • mapReduce

  • 查询

  • 删除

  • 更新

system.profile.ns

操作目标命名空间。MongoDB中的命名空间采用以下形式:数据库名,后跟点(.),然后是集合名

system.profile.command

包含与该操作相关联的完整命令对象的文档。

例如,以下输出包含在名为 items 的集合中,在名为 test 的数据库上执行 find 操作的命令对象。

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

以下示例输出包含由具有游标ID 19234103609 的命令生成的,在名为 items 的集合中,在名为 test 的数据库上执行的 getMore 操作的命令对象。

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

如果命令文档超过50千字节,则文档具有以下形式

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

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

如果将注释传递给操作,则存在 comment 字段。注释可以附加到任何 数据库命令。

system.profile.originatingCommand

对于从游标检索下一批结果的 "getmore" 操作,originatingCommand 字段包含最初创建该游标的完整命令对象(例如 findaggregate)。

system.profile.cursorid

由查询和 getmore 操作访问的游标ID。

system.profile.keysExamined

MongoDB执行操作时扫描的索引键的数量。

一般来说,如果keysExamined远高于nreturned,则数据库正在扫描许多索引键以找到结果文档。考虑创建或调整索引以提高查询性能。

keysExamined可用于以下命令和操作

system.profile.docsExamined

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

docsExamined 适用于以下命令和操作

system.profile.hasSortStage

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

hasSortStage 适用于以下命令和操作

system.profile.usedDisk

一个布尔值,表示由于 内存限制,任何聚合阶段是否已将数据写入临时文件。

仅在 usedDisktrue 时出现。

system.profile.ndeleted

操作删除的文档数量。

system.profile.ninserted

操作插入的文档数量。

system.profile.nMatched

符合更新操作查询条件的文档数量。

system.profile.nModified

被更新操作修改的文档数量。

system.profile.upsert

一个布尔值,表示更新操作的upsert选项值。只有当upsert为true时才出现。

system.profile.fromMultiPlanner

一个布尔值,表示查询规划器在为查询选择最终执行计划之前是否评估了多个计划。

只有当值为true时才出现。

system.profile.replanned

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

只有当值为true时才出现。

system.profile.replanReason

一个字符串,表示移除一个缓存计划的具体原因。

只有当replanned的值为true时才出现。

system.profile.keysInserted

给定写操作插入的索引键数量。

system.profile.writeConflicts

在写操作期间遇到的冲突数量;例如,一个update操作尝试修改与另一个update操作相同的文档。另见写冲突。

system.profile.numYield

操作需要让出以允许其他操作完成的次数。通常,当操作需要访问MongoDB尚未完全读入内存的数据时,它们会做出让步。这允许其他具有内存中数据的操作完成,同时MongoDB读取让步操作的数据。有关更多信息,请参阅操作何时让出的常见问题解答。

system.profile.queryHash

从 MongoDB 8.0 开始,现有的 queryHash 字段重命名为 planCacheShapeHash。如果您使用的是更早的 MongoDB 版本,您将看到 queryHash 而不是 planCacheShapeHash

system.profile.queryShapeHash

在版本中8.0.

queryShapeHash 是一个十六进制字符串,代表查询形状的哈希值。详细信息请参阅 查询形状。

system.profile.planCacheShapeHash

这是一个表示计划缓存查询形状哈希值的十六进制字符串,并且仅依赖于计划缓存查询形状。 planCacheShapeHash 可帮助识别具有相同计划缓存查询形状的慢查询,包括写入操作的查询过滤器。

注意

与任何哈希函数一样,不同的计划缓存查询形状可能导致相同的哈希值。然而,不同计划缓存查询形状之间哈希冲突的发生几率很小。

有关 planCacheShapeHashplanCacheKey 的更多信息,请参阅 planCacheShapeHash 和 planCacheKey。

从 MongoDB 8.0 开始,现有的 queryHash 字段重命名为 planCacheShapeHash。如果您使用的是更早的 MongoDB 版本,您将看到 queryHash 而不是 planCacheShapeHash

system.profile.planCacheKey

查询关联的计划缓存条目的键的哈希值。

planCacheShapeHash 不同,planCacheKey 是查询缓存形状和当前可用的索引的函数。具体来说,如果添加或删除可以支持查询形状的索引,则 planCacheKey 的值可能会更改,但 planCacheShapeHash 不会更改。

有关 planCacheShapeHashplanCacheKey 的更多信息,请参阅 planCacheShapeHash 和 planCacheKey。

从 MongoDB 8.0 开始,现有的 queryHash 字段重命名为 planCacheShapeHash。如果您使用的是更早的 MongoDB 版本,您将看到 queryHash 而不是 planCacheShapeHash

system.profile.queryFramework

用于处理操作的 查询框架

system.profile.locks

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

可能的锁定类型有

锁定类型
描述
ParallelBatchWriterMode

表示并行批量写入模式的锁定。

在早期版本中,PBWM 信息作为 Global 锁定信息的一部分进行报告。

ReplicationStateTransition
表示复制集成员状态转换所采取的锁定。
Global
表示全局锁定。
Database
表示数据库锁定。
Collection
表示集合锁定。
Mutex
表示互斥锁。
Metadata
表示元数据锁定。
DDLDatabase

表示 DDL 数据库锁定。

在版本中7.1.

DDLCollection

表示 DDL 集合锁定。

在版本中7.1.

oplog
表示对 oplog 的锁定。

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

锁定模式
描述
R
表示共享 (S) 锁。
W
表示独占 (X) 锁。
r
表示意向共享 (IS) 锁。
w
表示意向独占 (IX) 锁。

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

system.profile.locks.acquireCount

操作在指定模式下获取锁的次数。

system.profile.locks.acquireWaitCount

由于锁处于冲突模式而被阻塞的获取锁操作次数。 acquireWaitCount 小于或等于 acquireCount

system.profile.locks.timeAcquiringMicros

操作获取锁所需的总时间(微秒)。

timeAcquiringMicros 除以 acquireWaitCount 可得到特定锁模式的平均等待时间的大致估计。

system.profile.locks.deadlockCount

操作在等待锁定获取时遇到的死锁次数。

有关锁定模式的更多信息,请参阅MongoDB使用的锁定类型是什么?

system.profile.authorization

在版本中5.0.0.

每次操作访问用户缓存的次数。这些指标仅在操作至少访问一次用户缓存时显示。

这些指标仅在启用慢操作日志记录或数据库分析时可用。

system.profile.authorization 不包含在db.currentOp() 输出中。

system.profile.authorization.startedUserCacheAcquisitionAttempts

操作尝试访问用户缓存的次数。

system.profile.authorization.completedUserCacheAcquisitionAttempts

操作从用户缓存中检索用户数据的次数。

system.profile.authorization.userCacheWaitTimeMicros

操作等待用户缓存响应的总时间。

system.profile.storage

system.profile.storage信息提供了操作存储引擎数据和等待时间。

只有当值大于零时,才返回特定存储指标。

system.profile.storage.data.bytesRead

操作从磁盘读取到缓存的字节数。

从磁盘读取到缓存的数据包括执行查询所需的所有内容。如果数据已在缓存中,则从磁盘读取的字节数可能为0

从磁盘读取的字节数不仅包括查询到的文档

  • WiredTiger按页读取,一页可能包含一个或多个文档。如果一个文档在页中,该页中的所有文档都会被读入缓存并包含在bytesRead值中。

  • 如果缓存需要页面管理(如淘汰或重新读取),则bytesRead值将包括在这些操作中从磁盘读取的数据。

  • 如果索引不在缓存中或缓存中的索引已过时,WiredTiger将从磁盘读取多个内部和叶子页来在缓存中重建索引。

system.profile.storage.data.timeReadingMicros

操作从磁盘读取所需的时间(微秒)。

system.profile.storage.data.bytesWritten

操作从缓存写入磁盘的字节数。

WiredTiger通常不需要查询写入磁盘。查询修改的数据写入内存缓存,WiredTiger将其作为淘汰或检查点操作的一部分刷新到磁盘。在这种情况下,bytesWritten显示为0。

如果运行查询的线程需要强制页面管理(如淘汰),WiredTiger将页面内容写入磁盘。这种刷新可能包括与查询本身所做的更改无关的数据,这可能导致bytesWritten显示的值比预期更高。

system.profile.storage.data.timeWritingMicros

操作写入磁盘所花费的微秒数。

system.profile.storage.timeWaitingMicros.cache

操作等待缓存空间所花费的微秒数。

system.profile.storage.timeWaitingMicros.schemaLock

操作(如果修改了模式)等待获取模式锁所花费的微秒数。

system.profile.storage.timeWaitingMicros.handleLock

操作等待获取所需数据句柄的锁所需的时间(微秒)。

system.profile.nreturned

操作返回的文档数量。

system.profile.responseLength

操作结果文档的长度(字节)。较大的 responseLength 可能会影响性能。要限制查询操作结果文档的大小,可以使用以下任何一种方法

注意

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

system.profile.cpuNanos

在版本中6.3.

查询操作在纳秒中花费的总CPU时间。此字段仅在Linux系统上可用。

system.profile.protocol

MongoDB Wire Protocol 请求消息格式。

system.profile.millis

从操作开始到操作结束,从mongod的角度看的时间(毫秒)。

planningTimeMicros

在版本中6.2.

在查询规划阶段,findaggregate 命令花费的微秒数。

system.profile.planSummary

执行计划的摘要。

system.profile.execStats

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

system.profile.execStats 以树状结构呈现统计信息;每个节点提供查询操作在该阶段执行的操作的统计信息。

注意

以下字段列表针对 execStats 并非详尽无遗,因为返回的字段随阶段而异。

system.profile.execStats.stage

查询执行过程中所执行操作的描述性名称;例如

  • COLLSCAN 用于集合扫描

  • IXSCAN 用于扫描索引键

  • FETCH 用于检索文档

system.profile.execStats.inputStages

一个数组,包含当前阶段的输入阶段的统计信息。

system.profile.ts

操作的时间戳。

system.profile.client

操作源客户端连接的IP地址或主机名。

system.profile.appName

运行操作的客户端应用程序标识符。使用appName连接字符串选项来设置appName字段的自定义值。

system.profile.allUsers

会话中认证用户信息(用户名和数据库)的数组。另请参阅自托管部署中的用户。

system.profile.user

执行操作已验证的用户。如果操作不是由已验证用户执行的,则此字段的值为空字符串。

以下示例展示了在独立数据库上操作时,在 system.profile 集合中找到的样本文档。

system.profile 集合中的以下文档显示了在 test.report 集合上执行的样本查询操作的指标。

{
"op" : "query",
"ns" : "test.report",
"command" : {
"find" : "report",
"filter" : { "a" : { "$lte" : 500 } },
"lsid" : {
"id" : UUID("5ccd5b81-b023-41f3-8959-bf99ed696ce9")
},
"$db" : "test"
},
"cursorid" : 33629063128,
"keysExamined" : 101,
"docsExamined" : 101,
"fromMultiPlanner" : true,
"numYield" : 2,
"nreturned" : 101,
"planCacheShapeHash" : "811451DD",
"planCacheKey" : "759981BA",
"queryFramework" : "classic",
"locks" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(3),
"w" : NumberLong(3)
}
},
"Database" : {
"acquireCount" : { "r" : NumberLong(3) },
"acquireWaitCount" : { "r" : NumberLong(1) },
"timeAcquiringMicros" : { "r" : NumberLong(69130694) }
},
"Collection" : {
"acquireCount" : { "r" : NumberLong(3) }
}
},
"storage" : {
"data" : {
"bytesRead" : NumberLong(14736),
"timeReadingMicros" : NumberLong(17)
}
},
"responseLength" : 1305014,
"protocol" : "op_msg",
"millis" : 69132,
"planningTimeMicros" : 129,
"planSummary" : "IXSCAN { a: 1, _id: -1 }",
"execStats" : {
"stage" : "FETCH",
"nReturned" : 101,
"executionTimeMillisEstimate" : 0,
"works" : 101,
"advanced" : 101,
"needTime" : 0,
"needYield" : 0,
"saveState" : 3,
"restoreState" : 2,
"isEOF" : 0,
"docsExamined" : 101,
"alreadyHasObj" : 0,
"inputStage" : {
...
}
},
"ts" : ISODate("2019-01-14T16:57:33.450Z"),
"client" : "127.0.0.1",
"appName" : "MongoDB Shell",
"allUsers" : [
{
"user" : "someuser",
"db" : "admin"
}
],
"user" : "someuser@admin"
}

system.profile 集合包括 getMore 操作的指标。在此示例中,getMoretest.report 集合返回额外的文档。

{
"op" : "getmore",
"ns" : "test.report",
"command" : {
"getMore" : Long("33629063128"),
"collection" : "report",
"batchSize": 3,
"lsid" : {
"id": new UUID("3148c569-425c-4498-9168-5b7ee260bf27")
},
"$db" : "test"
},
originatingCommand: {
"find: "report",
"filter" : { "a" : { "$lte" : 500 } },
"lsid" : {
"id" : UUID("5ccd5b81-b023-41f3-8959-bf99ed696ce9")
},
"$db" : "test"
},
"cursorid" : Long("33629063128"),
"keysExamined" : 101,
"docsExamined" : 101,
"fromMultiPlanner" : true,
"numYield" : 2,
"nreturned" : 3,
"planCacheShapeHash" : "811451DD",
"planCacheKey" : "759981BA",
"queryFramework": "classic"
"locks" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(3),
"w" : NumberLong(3)
}
},
"Database" : {
"acquireCount" : { "r" : NumberLong(3) },
"acquireWaitCount" : { "r" : NumberLong(1) },
"timeAcquiringMicros" : { "r" : NumberLong(69130694) }
},
"Collection" : {
"acquireCount" : { "r" : NumberLong(3) }
}
},
readConcern: {level: 'local', provenance: 'implicitDefault'},
"responseLength" : 1305014,
"protocol" : "op_msg",
"millis" : 69132,
"planSummary" : "IXSCAN { a: 1, _id: -1 }",
"execStats" : {
"stage" : "FETCH",
"filter" : { "a" : { "$lte" : 500 } },
"nReturned" : 101,
"executionTimeMillisEstimate" : 0,
"works" : 104,
"advanced" : 104,
"needTime" : 0,
"needYield" : 0,
"saveState" : 3,
"restoreState" : 2,
"isEOF" : 0,
"direction": 'forward',
"docsExamined" : 104
},
"ts" : ISODate("2019-01-14T16:57:33.450Z"),
"client" : "127.0.0.1",
"appName" : "MongoDB Shell",
"allUsers" : [
{
"user" : "someuser",
"db" : "admin"
}
],
"user" : "someuser@admin"
}

从 MongoDB 8.0 开始,现有的 queryHash 字段重命名为 planCacheShapeHash。如果您使用的是更早的 MongoDB 版本,您将看到 queryHash 而不是 planCacheShapeHash

update(和delete)操作的配置文件条目包含整个更新命令。

system.profile 集合中的以下文档显示了在 test.report 集合上执行的样本更新操作的指标。

{
"op" : "update",
"ns" : "test.report",
"command" : {
"q" : { },
"u" : { "$rename" : { "a" : "b" } },
"multi" : true,
"upsert" : false
},
"keysExamined" : 0,
"docsExamined" : 25000,
"nMatched" : 25000,
"nModified" : 25000,
"keysInserted" : 25000,
"keysDeleted" : 25000000,
"numYield" : 6985,
"locks" : {
"Global" : {
"acquireCount" : { "r" : NumberLong(6986), "w" : NumberLong(13972) }
},
"Database" : {
"acquireCount" : { "w" : NumberLong(6986) },
"acquireWaitCount" : { "w" : NumberLong(1) },
"timeAcquiringMicros" : { "w" : NumberLong(60899375) }
},
"Collection" : {
"acquireCount" : { "w" : NumberLong(6986) }
},
"Mutex" : {
"acquireCount" : { "r" : NumberLong(25000) }
}
},
"storage" : {
"data" : {
"bytesRead" : NumberLong(126344060),
"bytesWritten" : NumberLong(281834762),
"timeReadingMicros" : NumberLong(94549),
"timeWritingMicros" : NumberLong(139361)
}
},
"millis" : 164687,
"planningTimeMicros" : 129,
"planSummary" : "COLLSCAN",
"execStats" : {
"stage" : "UPDATE",
"nReturned" : 0,
"executionTimeMillisEstimate" : 103771,
"works" : 25003,
"advanced" : 0,
"needTime" : 25002,
"needYield" : 0,
"saveState" : 6985,
"restoreState" : 6985,
"isEOF" : 1,
"nMatched" : 25000,
"nWouldModify" : 25000,
"wouldInsert" : false,
"inputStage" : {
"stage" : "COLLSCAN",
"nReturned" : 25000,
"executionTimeMillisEstimate" : 0,
"works" : 25002,
"advanced" : 25000,
"needTime" : 1,
"needYield" : 0,
"saveState" : 31985,
"restoreState" : 31985,
"isEOF" : 1,
"direction" : "forward",
"docsExamined" : 25000
}
},
"ts" : ISODate("2019-01-14T23:33:01.806Z"),
"client" : "127.0.0.1",
"appName" : "MongoDB Shell",
"allUsers" : [
{
"user" : "someuser",
"db" : "admin"
}
],
"user" : "someuser@admin"
}

返回

数据库分析器