Primeiro, sugiro dar uma olhada aqui:
Essa questão discute muito o mesmo tópico. Para resumir um pouco: por causa de como o registro no diário funciona no MongoDB e como ela remapeia a memória, pode fazer com que a memória residente do processo mongod
pareça artificialmente baixa. Se você der uma olhada na saída do comando free
e seu cache do sistema de arquivos estiver relativamente cheio, então você estará mais propenso a acertar essa anomalia de relatório de memória residente (supondo que mongod
seja o único consumidor realmente pesado de memória o sistema, claro).
No entanto, o MongoDB (no Linux, pelo menos) relata falhas de página (reais), não as falhas de página soft que ocorrem quando um processo solicita páginas que já estão na memória, mas que não são "de propriedade" do processo solicitante. Por isso, você está certo em se preocupar com o aumento de falhas de página, é uma das melhores medidas para sugerir que seus dados não estão se encaixando na memória e, portanto, você está tendo que acertar o disco.
Em termos de confirmação de que tudo o que você quer está na memória, você pode usar o comando de toque para carregar o índice e os dados desejados no cache do sistema de arquivos (não residente). Deve-se notar que esta é uma ferramenta um pouco brusca, pois simplesmente carregará todo o conjunto de dados e / ou todo o índice no cache, e poderá causar carga / travamento no sistema - use com cautela. Pode ser mais eficiente, dependendo do conjunto de dados, carregar dados recentes ou conhecidos com uma consulta de localização e uma explicação. Algo parecido com isto:
db.collection.find({criteria for loading data}).explain()
Ou, para garantir que um índice específico seja carregado, adicione uma dica explícita:
db.collection.find({criteria for loading data}).hint({index name})explain()
Outra coisa é olhar para a eficiência com a qual você está carregando dados na memória quando atinge o disco. Em geral, isso é uma troca entre IO e utilização de memória, mas se sua prioridade número um é a eficiência de memória e você tem algum IO sobressalente para lançar o problema, então no MongoDB você geralmente desejará ajustar seu readahead configurações usando o blockdev
aqui e aqui .