![Noções básicas sobre IXSCAN e COLLSCAN nos logs do MongoDB](https://rvso.com/image/697376/No%C3%A7%C3%B5es%20b%C3%A1sicas%20sobre%20IXSCAN%20e%20COLLSCAN%20nos%20logs%20do%20MongoDB.png)
Estou tentando percorrer alguns logs do Mongo na tentativa de encontrar operações lentas que preciso otimizar. O log de consultas lentas é o padrão e registra operações acima de 100 ms.
Acho que é seguro dizer que, de modo geral, uma pesquisa por COLLSCANS mostrará consultas que precisam de atenção. O que está menos claro é que se IXSCANS é um detalhe que devo pesquisar.
Considerando a documentação do MongoDB aqui:
https://docs.mongodb.com/manual/reference/explain-results/#collection-scan-vs-index-use
meu entendimento é que esta é uma situação binária, uma consulta é COLLSCAN ou IXSCAN. Portanto, se eu usar o IXSCAN, observarei TODAS as consultas lentas que não são COLLSCANS. Isso é verdade?
Responder1
Estou tentando percorrer alguns logs do Mongo na tentativa de encontrar operações lentas que preciso otimizar. O log de consultas lentas é o padrão e registra operações acima de 100 ms.
Em vez de navegar pelos logs do MongoDB, eu recomendo usar os scripts do código abertomtools
projeto. NOTA: Não sou o mtools
autor original, mas sou um colaborador.
mtools
é uma coleção de scripts Python que foi inspirada na dificuldade de vasculhar GBs de logs para tentar encontrar informações de interesse para implantações de produção do MongoDB. Os scripts principais destinam-se a se adequar ao fluxo de trabalho típico da linha de comando de canalização de saída por meio de filtros sucessivos (por exemplo, mlogfilter --scan | mplotqueries
).
Por exemplo:
mloginfo --queries
é um bom ponto de partida: ele agrega padrões de consulta para que você possa se concentrar em consultas executadas com frequência e que tenham maior impacto geral em sua implantação.mlogfilter
é essencialmente um grep para logs do MongoDB: você pode filtrar linhas de log por namespace, duração, conexão, padrão e outros critérios. O--scan
A opção é útil para identificar consultas ineficientes que não são necessariamente uma verificação de coleção.mplotqueries
é uma ferramenta de visualização de logs, que pode ser muito útil para identificar padrões e outliers.
Acho que é seguro dizer que, de modo geral, uma pesquisa por COLLSCANS mostrará consultas que precisam de atenção. O que está menos claro é que se IXSCANS é um detalhe que devo pesquisar.
As varreduras de coleções geralmente são de interesse, mas também podem ser o resultado de consultas únicas ou do uso esperado em uma coleção pequena. Em vez de focar no tipo de consulta, eu revisaria as consultas lentas (ou operações lentas em geral) para sua implantação para obter uma melhor compreensão do que você pode melhorar. Usar um índice geralmente é bom, mas há usos de índice ineficientes (por exemplo, classificação na memória ouexpressões regulares que não diferenciam maiúsculas de minúsculas) que pode valer a pena abordar.
meu entendimento é que esta é uma situação binária, uma consulta é COLLSCAN ou IXSCAN. Portanto, se eu usar o IXSCAN, observarei TODAS as consultas lentas que não são COLLSCANS. Isso é verdade?
Se você usar o grep, IXSCAN
encontrará todas as linhas de log mencionadas IXSCAN
, mas o resultado lento do registro de consultas definitivamente não é binário e também varia de acordo com a versão do servidor MongoDB. Embora o uso eficiente do índice seja uma otimização óbvia, há uma série deestágios do planejador de consultaque pode ser relevante para entender o desempenho da consulta.
Quando você encontra uma consulta lenta interessante nos logs, a próxima etapa geralmente é uma revisão mais detalhadaexplain output
. Eu uso explain(true)
(também conhecido comoallPlansExecution
modo), pois mostra detalhes dos planos de consulta que foram considerados, bem como do plano vencedor. Se você não tiver certeza de como interpretar o resultado da explicação para uma consulta lenta, recomendo postar emDBA StackExchange.
Vale a pena notar que explicar uma consulta não é uma medida do desempenho real com uma carga de trabalho. Na operação normal, os planos de consulta são armazenados em cache, enquanto explain
a saída detalhada reavalia especificamente os índices candidatos e o plano de consulta. VerPlanos de consultano manual do MongoDB para obter mais informações.