如何在使用索引的慢mongoDB查询中发现瓶颈?

时间:2020-02-06 10:46:11

标签: mongodb indexing

我有一个使用索引的简单查询:

  db.data.find({'w.em': 'testquery'}).explain();

这是查询explain

{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "data",
        "indexFilterSet" : false,
        "parsedQuery" : {
            "w.em" : {
                "$eq" : "testquery"
            }
        },
        "winningPlan" : {
            "stage" : "FETCH",
            "inputStage" : {
                "stage" : "IXSCAN",
                "keyPattern" : {
                    "w.em" : 1
                },
                "indexName" : "w.em_1",
                "isMultiKey" : false,
                "multiKeyPaths" : {
                    "w.em" : []
                },
                "isUnique" : false,
                "isSparse" : false,
                "isPartial" : false,
                "indexVersion" : 2,
                "direction" : "forward",
                "indexBounds" : {
                    "w.em" : [ 
                        "[\"testquery\", \"testquery\"]"
                    ]
                }
            }
        },
        "rejectedPlans" : []
    },
    "serverInfo" : {
        "host" : "******",
        "port" : ******,
        "version" : "3.4.23",
        "gitVersion" : "324017ede1dbb1c9554dd2dceb15f8da3c59d0e8"
    },
    "ok" : 1.0
}

此处的索引大小:

db.data.totalIndexSize(); // 738562048   ~700MB

它在具有8GB RAM的服务器上运行,因此我猜它有空间可以按照此处的建议在RAM中存储索引:

https://docs.mongodb.com/manual/tutorial/ensure-indexes-fit-ram/

集合约为4GB ...而我之前使用IXSCAN编写的简单查询需要16秒!

如何找出瓶颈?

0 个答案:

没有答案