Entender o uso de memória do MongoDB é crucial para uma boa experiência de hospedagem do MongoDB. Para obter o melhor desempenho, é imperativo manter seu conjunto de trabalho na memória. Vi algumas sugestões de que, se você usar unidades de estado sólido (SSD), isso tornará a memória menos importante. O tempo de acesso à memória de acesso aleatório dinâmico (DRAM) é da ordem de nanossegundos, o tempo de acesso do SSD é da ordem de microssegundos e o tempo de acesso do disco rígido é da ordem de milissegundos - então os SSDs ainda têm um caminho a percorrer para recuperar o atraso com memória.
O MongoDB usa arquivos de mapeamento de memória (MMF) para mapear o banco de dados na memória. Os dados são enviados periodicamente para o disco (obviamente o mecanismo é muito mais complicado, mas isso é assunto para outro post).
Depois que seu servidor MongoDB estiver funcionando, é importante monitorar e entender o uso de memória. Para monitorar nossos servidores MongoDB, você pode usar o ScaleGrid MongoDB Monitoring Console para ver métricas detalhadas sobre seu desempenho. Execute algumas cargas de trabalho de exemplo e estabeleça uma linha de base para que você possa entender quando algo não está funcionando normalmente. Aqui estão quatro contadores importantes que ajudarão você a monitorar o uso de memória do MongoDB:
-
Memória
Na verdade, são três contadores em um gráfico:
-
Memória residente
Esta é a quantidade real de memória física que está sendo usada pelo processo MongoDB.
-
Memória mapeada
Esta é a quantidade de memória virtual usada pelo progresso do MongoDB para mapear seu banco de dados na memória. Isso normalmente será o tamanho do seu banco de dados.
-
Memória Virtual
Isso inclui a memória virtual para todo o processo do MongoDB. Se você tiver o registro no diário ativado, isso normalmente terá o dobro do tamanho da memória mapeada.
-
-
Memória virtual não mapeada
Esta é a quantidade de memória virtual usada para dados de contabilidade e não para mapear os arquivos de dados. Por exemplo, cada conexão consome uma certa quantidade de memória. Normalmente, esse contador deve ser bastante baixo – geralmente menos de 1 GB.
-
Falhas de página
Este é o número de falhas de página/segundo. Obviamente, você deseja que esse número seja o mais baixo possível.
-
Falha de página difícil
Isso é acionado quando a página em questão não está na memória física e precisa ser buscada no disco. -
Falha de página suave
Isso ocorre quando a página reside em outro lugar na memória ou está em um estado de transição.
-
-
Árvore B (Índice Miss)
Uma falta de índice é duas vezes mais ineficiente, pois causa duas leituras de disco, uma para ler a entrada do índice e outra para ler o documento. O contador de árvore B rastreia o número de erros de índice. Este é outro lugar em que você deseja estabelecer uma linha de base para identificar padrões incomuns. Use o comando .explain() para verificar os planos de consulta para suas consultas comuns.
Outro aspecto importante do gerenciamento de memória no MongoDB é entender seu 'conjunto de trabalho'. Em nossa próxima postagem, examinaremos como determinar o conjunto de trabalho para seu banco de dados.