Eu tenho um mongos que se conecta a três clusters de fragmentos. Eu tenho alguns bancos de dados e coleções nesta instância mongos. Todas as outras coleções funcionam bem, exceto uma com um problema de desempenho. Demora 45 minutos para executar abaixo do comando
db.orders.find().explain('executionStats')
O número total de documentos nesta coleção é 111898400
. Cada cluster de estilhaços tem aproximadamente 30000000
documentos. Eu sei que não executei essa consulta na chave de fragmentação, mas gostaria de saber se esse é o motivo pelo qual demora tanto. Espero que leve alguns minutos no máximo, mas não 45 minutos.
Abaixo estão as estatísticas de execução do comando acima. Como posso perfilá-lo mais para descobrir por que demora tanto?
"executionStats" : {
"nReturned" : 111432926,
"executionTimeMillis" : 2727745,
"totalKeysExamined" : 0,
"totalDocsExamined" : 111899059,
"executionStages" : {
"stage" : "SHARD_MERGE",
"nReturned" : 111432926,
"executionTimeMillis" : 2727745,
"totalKeysExamined" : 0,
"totalDocsExamined" : 111899059,
"totalChildMillis" : NumberLong(6550367),
"shards" : [
{
"shardName" : "s0",
"executionSuccess" : true,
"executionStages" : {
"stage" : "SHARDING_FILTER",
"nReturned" : 36545358,
"executionTimeMillisEstimate" : 2723505,
"works" : 36613353,
"advanced" : 36545358,
"needTime" : 67994,
"needYield" : 0,
"saveState" : 321990,
"restoreState" : 321990,
"isEOF" : 1,
"invalidates" : 0,
"chunkSkips" : 67993,
"inputStage" : {
"stage" : "COLLSCAN",
"nReturned" : 36613351,
"executionTimeMillisEstimate" : 2689811,
"works" : 36613353,
"advanced" : 36613351,
"needTime" : 1,
"needYield" : 0,
"saveState" : 321990,
"restoreState" : 321990,
"isEOF" : 1,
"invalidates" : 0,
"direction" : "forward",
"docsExamined" : 36613351
}
}
},
{
"shardName" : "s1",
"executionSuccess" : true,
"executionStages" : {
"stage" : "SHARDING_FILTER",
"nReturned" : 36423091,
"executionTimeMillisEstimate" : 1647595,
"works" : 36423093,
"advanced" : 36423091,
"needTime" : 1,
"needYield" : 0,
"saveState" : 305586,
"restoreState" : 305586,
"isEOF" : 1,
"invalidates" : 0,
"chunkSkips" : 0,
"inputStage" : {
"stage" : "COLLSCAN",
"nReturned" : 36423091,
"executionTimeMillisEstimate" : 1614736,
"works" : 36423093,
"advanced" : 36423091,
"needTime" : 1,
"needYield" : 0,
"saveState" : 305586,
"restoreState" : 305586,
"isEOF" : 1,
"invalidates" : 0,
"direction" : "forward",
"docsExamined" : 36423091
}
}
},
{
"shardName" : "s2",
"executionSuccess" : true,
"executionStages" : {
"stage" : "SHARDING_FILTER",
"nReturned" : 38464477,
"executionTimeMillisEstimate" : 2166740,
"works" : 38862619,
"advanced" : 38464477,
"needTime" : 398141,
"needYield" : 0,
"saveState" : 331525,
"restoreState" : 331525,
"isEOF" : 1,
"invalidates" : 0,
"chunkSkips" : 398140,
"inputStage" : {
"stage" : "COLLSCAN",
"nReturned" : 38862617,
"executionTimeMillisEstimate" : 2128083,
"works" : 38862619,
"advanced" : 38862617,
"needTime" : 1,
"needYield" : 0,
"saveState" : 331525,
"restoreState" : 331525,
"isEOF" : 1,
"invalidates" : 0,
"direction" : "forward",
"docsExamined" : 38862617
}
}
}
]
}
},
Bem, o tamanho da coleção diz tudo. A consulta recupera todos os documentos em sua forma completa de todos os fragmentos, os envia pela rede e os mescla em um único resultado.
Na verdade, com esse número de registros, eu não acharia 45 minutos demais para uma varredura completa.