2011-08-22 34 views
7

Tôi đang có cơ sở dữ liệu được phân bổ dung lượng 85GB. Tôi có kích thước này bằng cách sử dụng lệnh show dbs. Nhưng khi tôi sử dụng db.stats(), tôi nhận được kích thước lưu trữ là 63GB. Sau khi đi qua các tài liệu, tôi tìm thấy dat mongo db phân bổ kích thước cho db được tạo và sau đó dữ liệu thực tế được lấp đầy.MongoDb: Tránh dung lượng đĩa quá nhiều

Tại sao mongo thực hiện việc preallocation này và có cách nào tôi có thể tránh việc preallocation này không?

Nếu có, bạn nên làm điều đó hay nó sẽ ảnh hưởng từ quan điểm hiệu suất?

Xin cảm ơn !!!

Trả lời

4

chi tiết có thể được tìm thấy ở đây: http://www.mongodb.org/display/DOCS/Excessive+Disk+Space

Bây giờ đến trường hợp của bạn. Tôi nghĩ rằng kích thước hiện tại của datafiles của bạn không thể được gây ra bởi preallocation một mình. Kích thước tệp dữ liệu được phân bổ tối đa là 2G. Có lẽ bạn đã từng lưu trữ nhiều dữ liệu hơn ngày hôm nay? Liên kết ở trên cũng cho biết cách lấy lại dữ liệu này nếu bạn chắc chắn bạn sẽ không cần đến nó ngay. Điều này sẽ đòi hỏi rất nhiều không gian đĩa trong quá trình, vì vậy bạn phải cung cấp cho một số kế hoạch này.

Tắt tính năng preallocation thực sự sẽ có tác động về hiệu ứng. Khi bạn thực hiện nhiều lần chèn, quy trình sẽ thường xuyên phải đợi để tạo một tệp mới.

+0

Xin cảm ơn vì câu trả lời .... sự khác biệt về kích thước là vì tôi đã từng lưu trữ dữ liệu và xóa nó sau này. Đi qua các tài liệu mà bạn đã cung cấp liên kết cho - tôi sẽ sử dụng db.runCommand ({compact: 'collectionname'} để thu gọn bộ sưu tập. –

0

Bạn có thể tắt tính năng preallocation với --noprealloc command line parameter.


Bạn có thể đọc thêm here

+0

Kể từ phiên bản 2.6, cờ này không còn được dùng nữa. --noprealloc bây giờ là mặc định. – binarysubstrate

Các vấn đề liên quan