Как определить узкое место в медленном запросе mongoDB, который использует индекс? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть простой запрос, который использует индекс:

  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

Он работает на сервере с 8 ГБ ОЗУ, поэтому я предполагаю, что у него есть место для хранения индексов в ОЗУ, как они предложили здесь:

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

Коллекция составляет ~ 4 ГБ ... и простой запрос, который я написал ранее, с использованием IXSCAN, занимает 16 секунд!

Как я могу определить узкое место?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...