MongoDB 3.x版本explain命令

来源:互联网 发布:成都电商美工培训 编辑:程序博客网 时间:2024/05/07 18:24

命令介绍

在对MongoDB进行性能分析时, 需要使用explain命令, 以观察索引是否使用到, 扫描了多少文档等信息. MongoDB 3.0以后explain命令进行了更改, 参数以及输出格式发生了变化. 3.0以后传入一个字符串参数verbosity.
语法如下:
cursor.explain(verbosity)
其中verbosity代表显示的内容. 执行以下语句:

db.users.find({username:"user12345"}).explain(true)

如上, true表示全部显示. 一般包含executionStats,queryPlanner,serverInfo几个部分:

{    "executionStats" : {        "allPlansExecution" : [ ],        "executionStages" : {            "advanced" : 0,            "direction" : "forward",            "docsExamined" : 1000000,            "executionTimeMillisEstimate" : 270,            "filter" : {                "username" : {                    "$eq" : "user12345"                }            },            "invalidates" : 0,            "isEOF" : 1,            "nReturned" : 0,            "needTime" : 1000001,            "needYield" : 0,            "restoreState" : 7812,            "saveState" : 7812,            "stage" : "COLLSCAN",            "works" : 1000002        },        "executionSuccess" : true,        "executionTimeMillis" : 347,        "nReturned" : 0,        "totalDocsExamined" : 1000000,        "totalKeysExamined" : 0    },    "ok" : 1,    "queryPlanner" : {        "indexFilterSet" : false,        "namespace" : "test.users",        "parsedQuery" : {            "username" : {                "$eq" : "user12345"            }        },        "plannerVersion" : 1,        "rejectedPlans" : [ ],        "winningPlan" : {            "direction" : "forward",            "filter" : {                "username" : {                    "$eq" : "user12345"                }            },            "stage" : "COLLSCAN"        }    },    "serverInfo" : {        "gitVersion" : "79d9b3ab5ce20f51c272b4411202710a082d0317",        "host" : "ubuntu",        "port" : 27017,        "version" : "3.2.10"    }}

参数说明

verbosity可选的模式有”queryPlanner”, “executionStats”, 和 “allPlansExecution”.传入true代表allPlansExecution mode, 传入false或者默认为queryPlanner mode.
对aggregate()方法调用explain方法会忽略参数信息, 以queryPlanner mode执行.

queryPlanner Mode: MongoDB运行 query optimizer来获取最优的执行计划, 这个模式返回被评估的方法queryPlanner信息

executionStats Mode: MongoDB运行query optimizer来获取最优的执行计划, 然后执行这个计划, 并返回执行过程的信息.
对于写操作, db.collection.explain()方法会返回将要执行的update和delete操作的信息, 但是并不会将修改应用到数据库.
db.collection.explain()并不会返回rejected plan的query execution information.

allPlansExecution Mode: MongoDB运行query optimizer来选择winning plan, 并且执行这个计划. 在”allPlansExecution” 模式中, MongoDB会返回在plan selection中所有的candidate计划.
对于写操作, 同executionStats mode. 并不进行真正的更改操作.
这个方法返回被评估的方法的queryPlanner和executionStats信息. executionStats包含完整的winning query执行信息.
如果query optimizer阶段考虑了多个执行计划,那么executionStats还包含了在plan selection阶段的winning plan和rejected candidate plans的部分信息.


参考文档 : https://docs.mongodb.com/manual/reference/method/db.collection.explain/#explain-method-verbosity

0 0
原创粉丝点击