Mongo笔记10-explain

> db.data_test.find().explain()

{

"queryPlanner" : {

"plannerVersion" : 1,

"namespace" : "mongobench.data_test",

"indexFilterSet" : false,

"parsedQuery" : {

},

"winningPlan" : {

"stage" : "COLLSCAN",

"direction" : "forward"

},

"rejectedPlans" : [ ]

},

"serverInfo" : {

"host" : "d95ba3e75fb5",

"port" : 27017,

"version" : "4.0.6",

"gitVersion" : "caa42a1f75a56c7643d0b68d3880444375ec42e3"

},

"ok" : 1

}

>

explain.queryPlanner

包含有关查询优化器选择查询计划的信息。

explain.queryPlanner.namespace

一个指定命名空间的字符串。, <database>.<collection>),对其运行查询。

explain.queryPlanner.indexFilterSet

一个布尔值,用于指定MongoDB是否为查询形状应用了索引筛选器。

explain.queryPlanner.winningPlan

查询优化器选择的详细计划的文档。MongoDB将计划表示为阶段树;例如,一个阶段可以有一个inputStage,如果该阶段有多个子阶段,则可以有inputStage。

explain.queryPlanner.winningPlan.stage

表示statge名称的字符串。

每个阶段由特定于该阶段的信息组成。例如,IXSCAN阶段将包括索引边界以及特定于索引扫描的其他数据。如果一个阶段有一个子阶段或多个子阶段,该阶段将有一个或多个inputStage。

explain.queryPlanner.winningPlan.inputStage

描述子阶段的文档,该阶段向其父阶段提供文档或索引键。如果父阶段只有一个子阶段,则显示该字段。

explain.queryPlanner.winningPlan.inputStages

描述子阶段的文档数组。子阶段为父阶段提供文档或索引键。如果父阶段有多个子节点,则显示该字段。例如,$或表达式或索引交集的阶段使用来自多个源的输入。

explain.queryPlanner.rejectedPlans

查询优化器考虑和拒绝的候选计划数组。如果没有其他候选计划,该数组可以为空。

> db.data_test.find().explain()

{

"queryPlanner" : {

"plannerVersion" : 1,

"namespace" : "mongobench.data_test",

"indexFilterSet" : false,

"parsedQuery" : {

},

"winningPlan" : {

"stage" : "COLLSCAN",

"direction" : "forward"

},

"rejectedPlans" : [ ]

},

"serverInfo" : {

"host" : "d95ba3e75fb5",

"port" : 27017,

"version" : "4.0.6",

"gitVersion" : "caa42a1f75a56c7643d0b68d3880444375ec42e3"

},

"ok" : 1

}

>

> db.data_test.find().explain("executionStats")

{

"queryPlanner" : {

"plannerVersion" : 1,

"namespace" : "mongobench.data_test",

"indexFilterSet" : false,

"parsedQuery" : {

},

"winningPlan" : {

"stage" : "COLLSCAN",

"direction" : "forward"

},

"rejectedPlans" : [ ]

},

"executionStats" : {

"executionSuccess" : true,

"nReturned" : 40000000,

"executionTimeMillis" : 10118,

"totalKeysExamined" : 0,

"totalDocsExamined" : 40000000,

"executionStages" : {

"stage" : "COLLSCAN",

"nReturned" : 40000000,

"executionTimeMillisEstimate" : 8087,

"works" : 40000002,

"advanced" : 40000000,

"needTime" : 1,

"needYield" : 0,

"saveState" : 312502,

"restoreState" : 312502,

"isEOF" : 1,

"invalidates" : 0,

"direction" : "forward",

"docsExamined" : 40000000

}

},

"serverInfo" : {

"host" : "d95ba3e75fb5",

"port" : 27017,

"version" : "4.0.6",

"gitVersion" : "caa42a1f75a56c7643d0b68d3880444375ec42e3"

},

"ok" : 1

}

>

executionStats

返回的executionStats信息详细说明了winning plan。为了在结果中包含executionStats,您必须以以下两种方式运行解释:

executionStats或

allPlansExecution冗长模式。使用allPlansExecution模式包括在计划选择期间捕获的部分执行数据。

explain.executionStats

包含描述winning plan的完整查询执行的统计信息。对于写操作,已完成的查询执行指的是将要执行的修改,但不将修改应用于数据库。

explain.executionStats.nReturned

匹配查询条件的文档数。nreturn对应于MongoDB早期版本中由cursor.explain()返回的n字段。

explain.executionStats.executionTimeMillis

查询计划选择和查询执行所需的总时间(毫秒)。executionTimeMillis对应于MongoDB早期版本中由cursor.explain()返回的millis字段。

explain.executionStats.totalKeysExamined

扫描的索引项的数量。totalkeysexamamed对应于MongoDB早期版本中curor .explain()返回的nscan字段。

explain.executionStats.totalDocsExamined

查询执行期间检查的文档数量。检查文档的常见查询执行阶段是COLLSCAN和FETCH。

totaldocsexamned是指检查的文档总数,而不是返回的文档数。例如,阶段可以检查文档以应用筛选器。如果文档被过滤掉,那么它将被检查,但不会作为查询结果集的一部分返回。

如果在查询执行期间对文档进行多次检查,那么totaldocsexamamed会对每次检查进行计数。也就是说,totaldocsexamned不是所检查的惟一文档总数的计数。

explain.executionStats.executionStages

以阶段树形式详述已完成的winning plan的执行情况;例如,一个阶段可以有一个inputStage或多个inputStage。

每个阶段由特定于该阶段的执行信息组成。

explain.executionStats.executionStages.works

指定查询执行阶段执行的“工作单元”的数量。查询执行将其工作划分为多个小单元。“工作单元”可能包括检查单个索引键、从集合中获取单个文档、将投影应用于单个文档或执行一段内部簿记。

explain.executionStats.executionStages.advanced

此阶段返回到其父阶段的中间结果或高级结果的数量。

explain.executionStats.executionStages.needTime

没有将中间结果推进到其父阶段的工作周期数(参见explain. executionstates . executionstage .advanced)。例如,索引扫描阶段可能花费一个工作周期寻找索引中的新位置,而不是返回索引键;这个工作周期可以算作explain. executionstates . executionstage。需要时间,而不是解释。

explain.executionStats.executionStages.needYield

存储层请求查询阶段暂停处理并生成其锁的次数。

explain.executionStats.executionStages.saveState

查询阶段暂停处理并保存其当前执行状态的次数,例如为生成其锁所做的准备。

explain.executionStats.executionStages.restoreState

查询阶段恢复已保存的执行状态的次数,例如在恢复之前生成的锁之后。

explain.executionStats.executionStages.isEOF

指定执行阶段是否已达到流的结束:

如果为true或1,则执行阶段已达到流结束。

如果false或0,该阶段可能仍然有结果要返回。例如,考虑一个具有限制的查询,该查询的执行阶段由一个带有查询的IXSCAN输入阶段的限制阶段组成。如果查询返回的结果超过指定的限制,则限制阶段将报告isEOF: 1,但其底层IXSCAN阶段将报告isEOF: 0。

explain.executionStats.executionStages.inputStage.keysExamined

对于扫描索引的查询执行阶段(例如IXSCAN), keysexamamed是索引扫描过程中检查的边界内键和边界外键的总数。如果索引扫描包含单个连续的键范围,则只需要检查边界内的键。如果索引边界包含多个键范围,索引扫描执行过程可能会检查越界键,以便从一个范围的末尾跳到下一个范围的开头。

db.keys.find( { x : { $in : [ 3, 4, 50, 74, 75, 90 ] } } ).explain( "executionStats" )

查询将扫描键3和4。然后,它将扫描键5,检测它是否越界,并跳到下一个键50。

继续这个过程,查询扫描键3、4、5、50、51、74、75、76、90和91。键5、51、76和91是仍在检查的越界键。keysexamned的值是10。

explain.executionStats.executionStages.inputStage.docsExamined

指定在查询执行阶段扫描的文档数量。

用于COLLSCAN阶段,以及用于从集合中检索文档的阶段(例如FETCH)

explain.executionStats.executionStages.inputStage.seeks

新版本3.4:仅适用于索引扫描(IXSCAN)阶段。

为了完成索引扫描,我们必须将索引游标定位到新位置的次数。

explain.executionStats.allPlansExecution

包含在计划选择阶段为winning plan和rejected plan捕获的部分执行信息。只有当explain在allPlansExecution冗长模式下运行时,该字段才会出现。

猜你喜欢

转载自blog.csdn.net/Linzhongyilisha/article/details/88054797
今日推荐