数据库探查器输出
在本页面
数据库探查器捕获有关读取和写入操作,游标操作和数据库命令的数据信息。要配置数据库概要文件并设置捕获概要文件数据的阈值,请参阅Database Profiler部分。
数据库分析器将数据写入system.profile集合(即capped collection)中。要查看事件探查器的输出,请对system.profile集合使用普通的 MongoDB 查询。
Note
因为数据库探查器会将数据写入数据库中的system.profile集合,所以探查器将对某些写活动进行探查,即使对于原本为只读的数据库也是如此。
在版本 3.4 中更改。
currentOp和database profiler报告所有 CRUD 操作的相同基本诊断信息,包括以下内容:
-
getMore
(OP_GET_MORE和command)
这些操作也包含在慢查询的日志 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"
}
update和delete的配置文件条目包含应用于命名集合的整个更新/删除文档。多个更新/删除文档将为每个文档生成一个配置文件条目。
以下示例反映了对名为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.limit
和system.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
- namespace操作目标。 MongoDB 中的命名空间采用database的形式,后跟一个点(
.
),然后是collection的名称。
- namespace操作目标。 MongoDB 中的命名空间采用database的形式,后跟一个点(
-
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
字段包含最初创建该游标的完整命令对象(例如find
或aggregate
)。
- 在版本 3.6 中进行了更改:对于用于从游标检索下一批结果的
-
system.profile.
cursorid
query
和getmore
操作访问的光标的 ID。
-
system.profile.
keysExamined
- 在版本 3.2.0 中进行了更改。
从system.profile.nscanned
重命名。 MongoDB 扫描以执行该操作的index键的数量。
通常,如果keysExamined远高于nreturned,则数据库将扫描许多索引键以查找结果文档。考虑创建或调整索引以提高查询性能。
在版本 3.4 中更改。
keysExamined
可用于以下命令和操作:
-
getMore
(OP_GET_MORE和command) -
system.profile.
docsExamined
- 在版本 3.2.0 中更改:从
system.profile.nscannedObjects
重命名。
- 在版本 3.2.0 中更改:从
MongoDB 扫描以执行操作的集合中的文档数。
在版本 3.4 中更改。
docsExamined
可用于以下命令和操作:
-
getMore
(OP_GET_MORE和command) -
system.profile.
moved
- 从 3.4 中删除
在 3.0.0 版中更改:仅在使用 MMAPv1 存储引擎时出现。
当更新操作将一个或多个文档移动到磁盘上的新位置时,此字段的值为true
。如果该操作未导致移动,则不会出现此字段。导致移动的操作要比就地更新花费更多的时间,并且通常是由于文档增长而发生的。
system.profile.
nmoved
- 在 3.0.0 版中更改:仅在使用 MMAPv1 存储引擎时出现。
操作在磁盘上移动的文档数。仅当操作导致移动时,此字段才会出现。该字段的隐式值为零,并且仅当非零时才存在该字段。
system.profile.
hasSortStage
- 在版本 3.2.0 中更改:从
system.profile.scanAndOrder
重命名。
- 在版本 3.2.0 中更改:从
hasSortStage是布尔值,是true
,当查询 不能 使用索引中的 Sequences 返回所请求的排序结果时;即 MongoDB 在从游标接收到文档后必须对文档进行排序。该字段仅在值为true
时出现。
在版本 3.4 中更改。
hasSortStage
可用于以下命令和操作:
-
getMore
(OP_GET_MORE和command) -
system.profile.
ndeleted
- 操作删除的文件数。
-
system.profile.
ninserted
- 操作插入的文档数。
-
system.profile.
nMatched
- 2.6 版的新功能。
与更新操作的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
字段。
- 3.0.0 版中的新功能:locks替换了
system.profile.locks提供有关在操作期间持有的各种锁定类型和锁定模式的信息。
可能的锁定类型为:
Lock Type | Description |
---|---|
Global | 代表全局锁定。 |
MMAPV1Journal | 表示 MMAPv1 存储引擎特定的锁,用于同步日志写入;对于非 MMAPv1 存储引擎,MMAPV1Journal 的模式为空。 |
Database | 表示数据库锁定。 |
Collection | 表示收集锁。 |
Metadata | 表示元数据锁定。 |
oplog | 表示锁定oplog。 |
锁定类型的可能锁定模式如下:
Lock Mode | Description |
---|---|
R | 表示共享(S)锁。 |
W | 表示排他(X)锁。 |
r | 表示共享意图(IS)锁。 |
w | 表示 Intent Exclusive(IX)锁。 |
返回的各种锁类型的锁信息包括:
-
system.profile.locks.
acquireCount
- 操作在指定模式下获得锁定的次数。
-
system.profile.locks.
acquireWaitCount
- 由于锁处于冲突模式下,操作必须 awaitacquireCount锁获取的次数。 acquireWaitCount小于或等于acquireCount。
-
system.profile.locks.
timeAcquiringMicros
- 操作必须 await 以获取锁的累积时间(以微秒为单位)。
timeAcquiringMicros除以acquireWaitCount得出特定锁定模式的平均 await 时间。
system.profile.locks.
deadlockCount
- 操作在 await 锁获取时遇到死锁的次数。
有关锁定模式的更多信息,请参见MongoDB 使用哪种类型的锁定?。
-
system.profile.
nreturned
- 操作返回的文档数。
-
system.profile.
responseLength
- 运算结果文件的字节长度。较大的responseLength会影响性能。要限制查询操作的结果文档的大小,可以使用以下任一方法:
Note
当 MongoDB 将查询配置文件信息写入日志时,responseLength值位于名为reslen
的字段中。
-
system.profile.
protocol
- MongoDB Wire 协议请求消息格式。
-
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
字段。
- 3.0 版中的新功能:stage替换了
作为查询执行的一部分执行的操作的描述性名称;例如
-
COLLSCAN
用于集合扫描 -
IXSCAN
用于扫描索引键 -
FETCH
用于检索文档 -
system.profile.execStats.
inputStages
- 3.0 版中的新功能:inputStages替换了
children
字段。
- 3.0 版中的新功能:inputStages替换了
一个数组,其中包含作为当前阶段 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
- 运行该操作的经过身份验证的用户。如果操作不是由经过身份验证的用户运行的,则此字段的值为空字符串。