Como obter o tamanho atual do conjunto de trabalho do MongoDB

9

Do documento , dizia

"Para um melhor desempenho, a maioria do seu conjunto ativo deve caber na RAM."

Então, por exemplo, meu db.stats()me dê

{
"db" : "mydb",
"collections" : 16,
"objects" : 21452,
"avgObjSize" : 768.0516501957859,
"dataSize" : 16476244,
"storageSize" : 25385984,
"numExtents" : 43,
"indexes" : 70,
"indexSize" : 15450112,
"fileSize" : 469762048,
"ok" : 1
}

Qual é o valor working set size?

Howard
fonte

Respostas:

9

A pergunta / resposta do SO vinculada por quanta nos comentários está correta, o "Conjunto de trabalho" é basicamente a quantidade de dados E índices que estarão ativos / em uso pelo seu sistema.

Você não pode dizer com o db.stats()que isso será, a menos que você pense que precisará ter todo o conjunto de dados e todo o índice na RAM. Ou seja, é possível calcular o conjunto de trabalho máximo para esse banco de dados, mas não o conjunto de trabalho ativo real. O máximo é a soma de:

  1. dataSize - O tamanho total dos dados mantidos neste banco de dados
  2. indexSize - O tamanho total de todos os índices criados neste banco de dados

No seu caso, esse máximo seria de aproximadamente 30,45 MiB, considerando a saída que você colou.

Para rastrear o uso de memória real Eu recomendaria uma combinação das figuras de db.stats()e os gráficos de memória (memória residente em particular) disponíveis na ferramenta de monitoramento livre - MMS .

Atualização (04/08/2013):

A versão 2.4 adicionou um Estimador de tamanho do conjunto de trabalho ao comando serverStatus - é apenas uma estimativa, mas pode ser usado como um guia e para verificar se as outras figuras e estimativas acima fazem sentido para a instância do MongoDB.

Atualização (setembro de 2016):

Três anos depois da minha resposta original e as coisas são muito mais complicadas - geralmente obter o tamanho dos seus dados e seus índices ainda é um bom ponto de partida. Mas, descobrir as coisas no MongoDB agora dependerá do mecanismo de armazenamento que você está usando. Além disso, a Versão 3.0 removeu o estimador do Conjunto de Trabalho vinculado acima para o MMAP como parte do trabalho de bloqueio no nível da coleção (consulte SERVER-13783 ). Agora existem (por exemplo) as estatísticas de cache do WiredTigermecanismo como uma substituição, supondo que você tenha saltado para o novo mecanismo. Por isso MMAP, a recomendação geral é considerar a métrica de falhas de página como um proxy para determinar se seus dados estão se encaixando na memória ou não.

Adam C
fonte
Na verdade, eu MMSjá estou usando , mas não tenho certeza de qual figura olhar.
Howard
Geralmente, a figura residente no gráfico de memória é a mais relevante aqui. Ele crescerá com o tempo e ocupará toda a RAM disponível (com dados mais antigos paginados conforme necessário para que novos dados sejam paginados) se o conjunto de dados for significativamente maior que a RAM. Caso contrário, e o conjunto de dados é razoavelmente estático, ele encontrará um nível mais baixo e pairará lá. O valor máximo que eu descrevi acima seria o máximo de RAM que um banco de dados individual ocuparia como parte dessa figura.
Adam C
1
O comando serverStatus não inclui mais a estimativa de tamanho do conjunto de trabalho, a partir do MongoDB 3.0. docs.mongodb.com/manual/reference/command/serverStatus
Vince Bowdren 5/16
1
As coisas mudaram muito em 3-4 anos. Deixei o original e adicionei uma atualização para cobrir algumas das opções nas versões mais recentes.
Adam C