Depois de tentar com diferentes drivers e clientes, sofremos com o tempo limite do mongodb na consulta de localização.
Mesmo o Profiling registra bem as configurações e os problemas.
2014-08-13T23:46:43.218+0200 [conn80] query mdb.fcol query: { $query: {
unid: "39068119d2924babffedde92ef937bd0" }, $maxTimeMS: 100 } planSummary:
IXSCAN { unid: 1 } ntoskip:0 nscanned:1 nscannedObjects:1 keyUpdates:0
numYields:1 locks(micros) r:334 nreturned:1 reslen:341 2181ms
Embora $maxTimeMS: 100
, a consulta leve 2181ms.
Como forçar o mongodb a respeitar o tempo limite e interromper o processamento se o tempo for excedido?
MongoDB v2.6.4, 64 bits
Algumas notas sobre o
MaxTimeMS
comportamento do MongoDB 2.6:MaxTimeMS
define um limite de tempo cumulativo em milissegundos para operações de processamento em um cursor.A latência de rede e o tempo ocioso de um cursor não contam para o MaxTimeMS.
Depois que o MaxTimeMS for atingido, a operação será encerrada no próximo ponto de interrupção seguro (por exemplo, quando essa operação ceder). Isso significa que uma operação pode exceder MaxTimeMS se não for interrompível no momento.
Na saída do seu perfil, a consulta manteve um bloqueio de leitura por 334 microssegundos e cedeu uma vez, portanto, parece estar bem abaixo do
MaxTimeMS
limite. Efetivamente, esta não é uma "consulta lenta" de execução inerente, mas provavelmente está sendo afetada por outra atividade em seu sistema.Uma consulta indexada corretamente retornando um único resultado provavelmente não será lenta; a
MaxTimeMS
opção é muito mais útil para uma consulta mal indexada ou uma consulta de execução longa que retorna muitos resultados.Para um exemplo forçado de uma consulta de execução lenta para testar,
MaxTimeMS
você pode usar uma função JavaScript, por exemplo:Sugiro observar o desempenho da consulta de forma agregada, pois deve haver outras métricas de desempenho correlacionadas. Idealmente, você deve acompanhar suas métricas do MongoDB ao longo do tempo usando um sistema de monitoramento. Para sugestões de monitoramento, consulte Monitoramento para MongoDB no manual.
A apresentação de Asya sobre Diagnóstico e Depuração também fornece uma boa visão geral das ferramentas de solução de problemas de desempenho e como elas foram usadas para resolver alguns cenários específicos de desempenho.