Я исследую некоторые запаздывающие запросы в нашем понедельнике go, и я обнаружил кое-что, что не могу точно объяснить.
Ниже приведено значение executeStats запроса в изолированной коллекции. Ключ шарда - {A:1, B:1}
, а запрос - {A:<value>,B:{$lt:<value>},C:<value>}
. Общее время выполнения, как вы можете видеть, составляет 1591 мс при 727 мс, занятых индексом scan + fetch.
Я могу понять 727 мс, вероятно, из-за медленных IOs на дисках сервера. Однако, где находятся потерянные 864 мс между извлечением и стадией single_shard? Это только задержка сети? Если осколок должен был загрузить индексы в ОЗУ, должен ли он быть включен в это потерянное время или это будет на этапах IDX_SCAN / FETCH?
Ну, в принципе, у вас есть какое-либо объяснение относительно того, что может замедлить этот запрос вниз?
"executionStats" : {
"nReturned" : 100,
"executionTimeMillis" : 1591,
"totalKeysExamined" : 100,
"totalDocsExamined" : 100,
"executionStages" : {
"stage" : "SINGLE_SHARD",
"nReturned" : 100,
"executionTimeMillis" : 1591,
"totalKeysExamined" : 100,
"totalDocsExamined" : 100,
"totalChildMillis" : NumberLong(1559),
"shards" : [
{
"shardName" : "redacted",
"executionSuccess" : true,
"executionStages" : {
"stage" : "LIMIT",
"nReturned" : 100,
"executionTimeMillisEstimate" : 727,
"works" : 101,
"advanced" : 100,
"needTime" : 0,
"needYield" : 0,
"saveState" : 50,
"restoreState" : 50,
"isEOF" : 1,
"invalidates" : 0,
"limitAmount" : 100,
"inputStage" : {
"stage" : "FETCH",
"nReturned" : 100,
"executionTimeMillisEstimate" : 727,
"works" : 100,
"advanced" : 100,
"needTime" : 0,
"needYield" : 0,
"saveState" : 50,
"restoreState" : 50,
"isEOF" : 0,
"invalidates" : 0,
"docsExamined" : 100,
"alreadyHasObj" : 0,
"inputStage" : {
"stage" : "SHARDING_FILTER",
"nReturned" : 100,
"executionTimeMillisEstimate" : 22,
"works" : 100,
"advanced" : 100,
"needTime" : 0,
"needYield" : 0,
"saveState" : 50,
"restoreState" : 50,
"isEOF" : 0,
"invalidates" : 0,
"chunkSkips" : 0,
"inputStage" : {
"stage" : "IXSCAN",
"nReturned" : 100,
"executionTimeMillisEstimate" : 22,
"works" : 100,
"advanced" : 100,
"needTime" : 0,
"needYield" : 0,
"saveState" : 50,
"restoreState" : 50,
"isEOF" : 0,
"invalidates" : 0,
"keyPattern" : {
"A" : 1,
"C" : 1,
"B" : -1
},
"indexName" : "A_1_C_1_B_-1",
"isMultiKey" : false,
"multiKeyPaths" : {
"A" : [ ],
"C" : [ ],
"B" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"A" : [
"[517615.0, 517615.0]"
],
"C" : [
"[false, false]"
],
"B" : [
"(1579092003000.0, -inf.0]"
]
},
"keysExamined" : 100,
"seeks" : 1,
"dupsTested" : 0,
"dupsDropped" : 0,
"seenInvalidated" : 0
}
}
}
}
}
]
}
Спасибо.