Skip to content

Instantly share code, notes, and snippets.

@leandroandrade
Last active December 12, 2023 14:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leandroandrade/c53dfd982fc524f5ee6d473adf2a6b8e to your computer and use it in GitHub Desktop.
Save leandroandrade/c53dfd982fc524f5ee6d473adf2a6b8e to your computer and use it in GitHub Desktop.

Otimizar a performance de aplicações que usam MongoDB

Abaixo pontos de análise:

  • usar .explain("executionStats") para verificar o status de execução da query. COLLSCAN significa que todos os registro da collection foram escaneados.

    • queryPlanner.winningPlan.stage: tipo de collection scan
    • executionStats.nReturned: número de documentos retornados
    • executionStats.totalKeysExamined: valor 0 significa que o índice não foi usado.
    • executionStats.totalDocumentsExamined: total de documentos que a query examinou.
    • executionStats.executionTimeMillis: tempo de execução da query.
    • executionStats.executionStages: em caso de query complexa, todos os estágios serão apresentedos.
  • checar CPU, memória e disco nos momentos de pico.

  • mongostat pode retornar métricas (connections, r/w por segundo, e mais)

  • monitorar queries com algum APM

  • re-indexar as collections com db.itemsCollection.reIndex(); durante períodos de manutenção

  • limitar a quantidade de registros a serem retornados

  • usar projection para retornar somente os campos necessários

  • configurar maxPoolSize

  • sempre que puder, usar operações batch

  • soft deletes pode ser uma estratégia (is_deleted).

  • usar alguma estrutura de cache

  • usar aggregation

    • sempre filtre no primeiro estágio
    • evite allowDiskUse. Use os dados dentro dos limites da memória.
    • prefira streaming a blocking. Operações como group e sort são blocking

Referências

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment