Por que, após excluir uma coleção de mais de 110 GB, meu diretório / var / lib / mongodb ainda tem o mesmo tamanho?

12

Estou tendo alguns problemas com o MongoDB e o uso de espaço. Em particular, eu costumava ter uma grande coleção de cerca de 600 milhões de registros, totalizando mais de 110 GB em disco. Recentemente, decidi descartá-lo porque os dados estavam desatualizados. Para isso, deixei a coleção cair na interface da web do rockmongo. Consequentemente, o rockmongo não me mostra mais a coleção, no entanto, o uso do meu disco não mudou.

Existe alguma operação limpa que eu não saiba, que deve ser executada para sincronizar o banco de dados com os arquivos do banco de dados em disco?

Eu tentei executar um "reparo", mas o sistema reclama que não há espaço suficiente no disco ... isso é porque tudo é usado pelo MongoDB.

tunnuz
fonte

Respostas:

19

Como na maioria dos sistemas de banco de dados, os arquivos do banco de dados não diminuem quando você exclui os dados, os dados são apenas removidos / marcados como excluídos e o espaço é reutilizado.

Você precisará executar db.repairDatabase()para compactar o espaço, conforme observado aqui

n
fonte
2
O espaço no disco rígido era muito baixo para fazer isso. No entanto, eu resolvido desta maneira: mongodump, oldDatabase.dropDatabase(), mongorestore --db newDatabase dump/oldDatabase.
Tunnuz 12/05/11
4

Embora a abordagem mongodump / drop / mongorestore acima funcione bem de uma perspectiva técnica, será necessário que você coloque o banco de dados offline enquanto o faz, o que seria um evento que afeta o serviço.

Se você deseja fazer isso sem tempo de inatividade E se estiver usando conjuntos de réplicas do MongoDB [1], pode fazer o seguinte:

  1. Selecione um membro e pare o MongoDB lá (service mongodb stop). Se esse foi o PRIMÁRIO, aguarde que outro membro seja eleito o PRIMÁRIO.
  2. Remova os arquivos de dados desse membro (cd / var / lib / mongodb; rm *).
  3. Reinicie o serviço MongoDB novamente (service mongodb start).
  4. Aguarde o membro ressincronizar com o PRIMARY (rs.status ()).
  5. Isso reconstruirá apenas os arquivos de dados (menores) necessários.

Repita as etapas acima para cada um dos outros membros no conjunto de réplicas.

[1] https://docs.mongodb.org/manual/tutorial/deploy-replica-set )

James Mernin
fonte