MongoDB 3.x版本explain命令

命令介绍

在对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

你可能感兴趣的:(MongoDB)