110GB 이상의 콜렉션을 삭제 한 후에도 / var / lib / mongodb 디렉토리의 크기가 여전히 같은 이유는 무엇입니까?


12

MongoDB 및 공간 사용에 문제가 있습니다. 특히 디스크에 총 110 + GB가 넘는 약 6 억 건의 레코드가 많이있었습니다. 최근 데이터가 오래되어 삭제하기로 결정했습니다. 그렇기 때문에 rockmongo의 웹 인터페이스를 통해 컬렉션을 삭제했습니다. 따라서 rockmongo는 더 이상 컬렉션을 표시하지 않지만 디스크 사용량은 전혀 변경되지 않았습니다.

데이터베이스에서 디스크의 데이터베이스 파일과 데이터베이스를 동기화하기 위해 실행해야하는 클린 작업이 있습니까?

"수리"를 수행하려고했지만 디스크 공간이 충분하지 않다고 시스템이 불평합니다. MongoDB가 모두 사용하기 때문입니다.

답변:


19

대부분의 데이터베이스 시스템과 마찬가지로 데이터를 삭제할 때 데이터베이스 파일이 축소되지 않고 데이터가 삭제 / 삭제 된 것으로 표시되며 공간이 재사용됩니다.

여기에db.repairDatabase() 명시된대로 공간을 압축 해야합니다.


2
하드 디스크 공간이 부족하여이를 수행 할 수 없습니다. 그러나 나는 이런 식으로 해결 : mongodump, oldDatabase.dropDatabase(), mongorestore --db newDatabase dump/oldDatabase.
tunnuz

5

위의 mongodump / drop / mongorestore 접근 방식은 기술적 인 관점에서 잘 작동하지만 서비스에 영향을주는 이벤트 인 데이터베이스를 오프라인 상태로 만들어야합니다.

다운 타임없이이 작업을 수행하고 MongoDB Replica Sets [1]를 사용하는 경우 다음과 같이 할 수 있습니다.

  1. 멤버를 선택하고 그곳에서 MongoDB를 중지하십시오 (서비스 mongodb 중지). 이것이 PRIMARY 인 경우 다른 회원이 PRIMARY로 선출 될 때까지 기다리십시오.
  2. 이 멤버에서 데이터 파일을 제거하십시오 (cd / var / lib / mongodb; rm *).
  3. MongoDB 서비스를 다시 시작하십시오 (service mongodb start).
  4. 멤버가 PRIMARY (rs.status ())로 다시 동기화 될 때까지 기다립니다.
  5. 필요한 (더 작은) 데이터 파일 만 다시 작성합니다.

그런 다음 복제 세트의 다른 각 구성원에 대해 위 단계를 반복하십시오.

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


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.