Giới thiệu
Khi xóa lượng lớn dữ liệu trong MongoDB, dung lượng đĩa cứng không tự động giải phóng. Bạn cần chạy lệnh repairDatabase() để tái cấu trúc và thu hồi không gian trống.
Quy trình thực hiện
1. Kiểm tra database hiện tại
> db;
Test
2. Chạy repairDatabase()
> db.repairDatabase()
{ "ok" : 1 }
3. Kết quả
Lệnh này sẽ:
- Đọc lại tất cả dữ liệu còn lại
- Viết lại vào các file dữ liệu mới (loại bỏ khoảng trống do xóa)
- Xây dựng lại tất cả các index
- Giảm kích thước file dữ liệu trên đĩa
⚠️ Cảnh quan trọng:
repairDatabase()yêu cầu dung lượng đĩa trống gấp đôi kích thước database hiện tại trong quá trình chạy- Lệnh này khóa database (block write operations) cho đến khi hoàn tất
- Từ MongoDB 3.0+, với storage engine WiredTiger, việc này ít khi cần thiết vì WiredTiger tự động compact
- Thay vào đó, hãy dùng
compactcommand trên collection cụ thể
Phương án thay thế hiện đại (MongoDB 3.0+ WiredTiger)
// Compact một collection cụ thể (không khóa toàn bộ DB)
db.runCommand({ compact: "tenCollection", force: true })
// Hoặc dùng admin command
use admin
db.runCommand({ compact: "tenDatabase.tenCollection" })
Khi nào nên dùng repairDatabase?
- MongoDB version cũ (MMAPv1 storage engine)
- Cần reclaim space cho toàn bộ database
- Có đủ dung lượng đĩa trống và window maintenance