사용된 버전은 mongodb-win32-x86_64-3.2.1이며 기본 WiredTiger 스토리지 엔진이 사용됩니다.
컬렉션에는 약 400만 개의 문서가 있으며 40G의 공간을 차지하며 나중에 각 문서 처리 중 불필요한 부분을 탐색하여 업데이트했습니다(문서는 삭제되지 않음). 이 작업을 수행하는 스크립트가 예정대로 실행되고 완료되었습니다. 출력 통계에 따르면 문서의 전체 축소는 원본의 약 45%로 줄어들었습니다. 이는 20G 이상의 공간이 확보되었음을 의미합니다. 그러나 데이터베이스 파일 크기는 작아지지 않고 증가했습니다. 조금(약 1%).
문서에서 저장에 관한 장을 읽어보세요. https://docs.mongodb.com/v3.2...,其中提到删除文档导致的空记录占用空间可通过compact回收(使用WiredTiger存储引擎时),没提到前述这种修改文档形成的“虚占空间”的情形,我运行了compact,几秒钟就结束了,存储文件没有变小。那么该怎么办呢?
으아아아
예, WT가 최신 버전을 사용하면
compact
실제로 공간을 확보할 수 있지만 버그로 인해 특정 버전 3.2 이후부터 적용되어야 합니다. 구체적인 버전 번호(3.2.9? ) 그러나 3.2.1이 확실히 유효하지 않다는 것은 확실하며 최신 버전인 3.2.12로 업그레이드하면 이 문제가 확실히 해결됩니다.repairDatabase
에 비하면compact
는 확실히 가벼워 보이지만, 그래도 무거운 작업이라는 게 피할 수 없는 문제다. Windows에서 디스크 조각 모음을 상상해 보세요. 원리는 동일합니다. 더 권장되지만 덜 영향을 미치는 접근 방식은 복제본 세트를 사용하여 모든 노드를 순차적으로 다시 초기화하고 공간을 해제하는 것입니다.더 중요한 질문은 이 공간을 되찾는 것이 실제로 당신에게 의미가 있느냐는 것입니다. 대부분의 경우 시스템이 이러한 공간을 점유했다는 사실은 시스템 설계가 변경되지 않는 한 이러한 공간을 다시 점유할 가능성이 있음을 의미합니다. 이를 해제하고 나중에 재할당하는 것보다 그대로 유지하면 시스템이 이를 재사용하는 것이 더 좋습니다.
다음은 제가 이해한 내용입니다.
1. 단일 컬렉션의 압축은 파일 시스템의 저장 공간을 회수하지 않으며, 전체 데이터베이스의 db.repairDatabase()만 파일 시스템의 저장 공간을 회수할 수 있습니다. RepirDatabase()를 사용해 보십시오.
2. 내보내기/가져오기 수집 방법을 사용할 수도 있습니다
위 작업이 시스템 성능에 미치는 영향에 유의하세요. 참고로.
요즘 휴가를 다녀왔는데, 미리 행복한 설 연휴 보내시기 바랍니다.
MongoDB를 사랑해주세요!