Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Desempenho do MongoDB

Ao desenvolver e operar aplicativos com o MongoDB, talvez seja necessário analisar o desempenho do aplicativo e de seu banco de dados. Quando você encontra um desempenho degradado, geralmente é por causa das estratégias de acesso ao banco de dados, da disponibilidade do hardware e do número de conexões abertas ao banco de dados.

You may experience performance limitations from inadequate or inappropriate indexing strategies or poor schema design patterns. Locking Performance discusses how these can impact MongoDB's internal locking.

Problemas de desempenho podem indicar que o banco de dados está operando na capacidade e que é hora de adicionar capacidade adicional ao banco de dados. Em particular, o conjunto de trabalho do aplicativo deve caber na memória física disponível.

Em alguns casos, os problemas de desempenho podem ser temporários e relacionados a uma carga anormal de tráfego. Conforme discutido em Número de conexões, o dimensionamento pode ajudar a reduzir o tráfego excessivo.

A análise de banco de dados pode ajudar você a entender quais operações estão causando degradação.

O MongoDB usa um sistema de bloqueio para garantir a consistência do conjunto de dados. Se determinadas operações durarem muito tempo ou se formar uma fila, o desempenho diminui à medida que as solicitações e operações aguardam o bloqueio.

As desacelerações relacionadas ao bloqueio podem ser intermitentes. Para ver se o bloqueio está afetando seu desempenho, consulte a seção bloqueios e a seção globalLock da saída serverStatus .

Observação

Some serverStatus response fields are not returned on MongoDB Atlas Free clusters or Flex clusters. For more information, see Free and Flex in the MongoDB Atlas documentation.

Dividir locks.<type>.timeAcquiringMicros por locks.<type>.acquireWaitCount pode fornecer um tempo médio aproximado de espera para um modo de bloqueio específico.

locks.<type>.deadlockCount fornece o número de vezes que as aquisições de bloqueio encontraram impasses.

Se globalLock.currentQueue.total for consistentemente alto, muitas solicitações podem estar aguardando um bloqueio. Isso indica um possível problema de simultaneidade que pode estar afetando o desempenho.

Se globalLock.totalTime for alto em relação a uptime, o banco de dados está em um estado bloqueado por um período significativo.

As query longas podem resultar de:

  • Uso ineficaz de índices

  • Projeto de esquema não ideal

  • Estrutura de query ruim

  • Problemas de arquitetura do sistema

  • RAM insuficiente resultando em leituras de disco

Em alguns casos, o número de conexões entre os aplicativos e o banco de dados pode sobrecarregar a capacidade do servidor de lidar com as solicitações. Os seguintes campos no documento serverStatus fornecem perspicácia:

  • connections é um contêiner para os dois campos a seguir:

    • connections.current o número total de clientes atuais conectados à instância do banco de dados.

    • connections.available o número total de conexões não utilizadas disponíveis para novos clientes.

Muitas solicitações de aplicativos simultâneas podem sobrecarregar a capacidade do servidor de acompanhar a demanda. Se for esse o caso, aumente a capacidade da implantação.

Para aplicativos com gravação pesada, implemente fragmentação e adicione um ou mais fragmentos a um cluster fragmentado para distribuir a carga entre as instâncias de mongod .

Os picos no número de conexões também podem ser o resultado de erros no aplicativo ou no driver. Todos os drivers MongoDB oficialmente suportados implementam o pool de conexões, o que permite que os clientes usem e reutilizem conexões com mais eficiência. Um número extremamente alto de conexões, particularmente sem carga de trabalho correspondente, geralmente é indicativo de um erro de driver ou de outra configuração.

A menos que seja restringido por limites de todo o sistema, o número máximo de conexões de entrada suportadas pelo MongoDB é configurado com a definição maxIncomingConnections. Nos sistemas baseados em Unix, os limites de todo o sistema podem ser modificados usando o comando ulimit ou editando o arquivo /etc/sysctl do sistema. Consulte Configurações do UNIX ulimit para implantações autogerenciadas para obter mais informações.

MongoDB Atlas sets the limit for concurrent incoming connections based on the cluster tier and class. To learn more, see Connection Limits and Cluster Tier in the Atlas documentation.