Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/

Desempenho do MongoDB

Nesta página

  • Desempenho de trava
  • Número de conexões
  • Captura de dados de diagnóstico em tempo integral

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.

Alguns usuários podem enfrentar limitações de desempenho como resultado de estratégias de indexação inadequadas ou inapropriadas, ou como consequência de padrões de design de esquema ruins. Desempenho de trava explica como isso pode impactar as travas internas do MongoDB.

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 diminuirá à medida que as solicitações e operações aguardarem a trava.

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

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 trava encontraram imprevistos.

Se globalLock.currentQueue.total for consistentemente alto, então há uma chance de que um grande número de solicitações esteja aguardando uma trava. 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 existiu em um estado de bloqueio por um período significativo de tempo.

Consultas longas podem resultar do uso ineficaz de índices; projeto de esquema não ótimo; estrutura de consulta deficiente; problemas de arquitetura de sistemas; ou 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 podem fornecer informações:

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

Se houver inúmeras solicitações de aplicativos simultâneas, o banco de dados poderá ter problemas para acompanhar a demanda. Se for esse o caso, aumente a capacidade do sistema.

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 volume 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 obter mais informações.

Para ajudar os engenheiros do MongoDB a analisar o comportamento do servidor, os processos mongod e mongos incluem um mecanismo de captura de dados de diagnóstico em tempo integral (FTDC). O FTDC está habilitado por padrão. Devido à sua importância na depuração de sistemas, as falhas de thread do FTDC são fatais e interrompem o processo pai mongod ou mongos.

Importante

Privacidade do FTDC

Os arquivos de dados FTDC são compactados e não podem ser lidos por humanos. Eles herdam as mesmas permissões de acesso de arquivo que os arquivos de dados MongoDB. Somente usuários com acesso a arquivos de dados FTDC podem transmitir os dados FTDC.

Os engenheiros do MongoDB não podem acessar dados FTDC sem permissão explícita e assistência de proprietários ou operadores do sistema.

Os dados do FTDC nunca contêm nenhuma das seguintes informações:

  • Amostras de consultas, predicados de consulta ou resultados de consulta

  • Dados amostrados de qualquer collection ou índice de usuário final

  • Credenciais de usuário do sistema ou MongoDB ou certificados de segurança

Os dados do FTDC contêm determinadas informações do computador host, como nomes de host, informações do sistema operacional e as opções ou configurações usadas para iniciar o mongod ou mongos. Essas informações podem ser consideradas protegidas ou confidenciais por algumas organizações ou órgãos reguladores, mas normalmente não são consideradas Informações de Identificação Pessoal (PII). Para clusters onde esses campos são configurados com dados protegidos, confidenciais ou PII, notifique os engenheiros do MongoDB antes de enviar dados FTDC para coordenar as medidas de segurança apropriadas.

Observação

Permissões de usuário FTDC no Windows

No Windows, para coletar dados do sistema, como disco, cpu e memória, o FTDC exige permissões de acesso da Microsoft dos seguintes grupos:

  • Usuários do monitor de desempenho

  • Usuários de registro de desempenho

Se o usuário executando o mongod e não for um administrador, adicione-o a estes mongos grupos para registrar dados FTDC. Para obter mais informações, consulte a documentação da Microsoft aqui.

O FFTDC coleta periodicamente estatísticas produzidas pelos seguintes comandos:

Dependendo do sistema operacional do host, os dados de diagnóstico podem incluir uma ou mais das seguintes estatísticas de utilização:

  • Utilização da CPU

  • Utilização da memória

  • Utilização de disco relacionada ao desempenho. FTDC não inclui dados relacionados à capacidade de armazenamento.

  • Estatísticas de desempenho da rede. O FTDC captura apenas metadados e não captura ou inspeciona nenhum pacote de rede.

Observação

Se o processo mongod for executado em um container, o FTDC relatará as estatísticas de utilização da perspectiva do container em vez do sistema operacional host. Por exemplo, se o mongod for executado em um contêiner configurado com restrições de RAM, o FTDC calculará a utilização da memória em relação ao limite de RAM do contêiner, em vez do limite de RAM do sistema operacional host.

FTDC coleta estatísticas produzidas pelos seguintes comandos na rotação ou inicialização do arquivo:

Os processos mongod armazenam arquivos de dados FTDC em um diretório diagnostic.data nas instâncias storage.dbPath. Todos os arquivos de dados de diagnóstico são armazenados neste diretório. Por exemplo, dado um dbPath de /data/db, o diretório de dados de diagnóstico seria /data/db/diagnostic.data.

Os processos mongos armazenam arquivos de dados FTDC em um diretório de diagnóstico relativo à configuração do caminho de log systemLog.path . O MongoDB trunca a extensão de arquivo do caminho de log e concatena o diagnostic.data para o nome restante. Por exemplo, dada uma configuração path de /var/log/mongodb/mongos.log, o diretório de dados de diagnóstico seria /var/log/mongodb/mongos.diagnostic.data.

Você pode visualizar o código-fonte do FTDC no repositório do MongoDB no Github . Os ftdc_system_stats_*.ccp arquivos definem especialmente quaisquer dados de diagnóstico específicos capturados do sistema.

O FTDC é executado com os seguintes padrões:

  • Captura de dados a cada 1 segundo

  • Tamanho máximo da pasta diagnostic.data de 200 MB.

Esses padrões são projetados para fornecer dados úteis aos engenheiros do MongoDB com impacto mínimo no desempenho ou no tamanho do armazenamento. Esses valores só exigem modificações se solicitados pelos engenheiros do MongoDB para fins específicos de diagnóstico.

Para desativar o FTDC, inicie o mongod ou mongos com a opção diagnosticDataCollectionEnabled: false nas configurações setParameter do seu arquivo de configuração:

setParameter:
diagnosticDataCollectionEnabled: false

A desativação do FTDC pode aumentar o tempo ou os recursos necessários para analisar ou depurar problemas com o suporte dos engenheiros do MongoDB. Para obter informações sobre o suporte do MongoDB, visite Introdução ao suporte do MongoDB.

← Lista de verificação de desenvolvimento