سؤال

في أول الخادم أحصل على:

root@prod ~ # du -hs /var/lib/mongodb/
909G    /var/lib/mongodb/

بعد الهجرة هذا قاعدة البيانات مع mongodump/mongorestore في ثاني خادم أحصل على:

root@prod ~ # du -hs /var/lib/mongodb/
30G /var/lib/mongodb/

بعد أن انتظرت ساعات قليلة ، مونجو الانتهاء من الفهرسة حصلت على:

root@prod ~ # du -hs /var/lib/mongodb/
54G /var/lib/mongodb/

أنا اختبرت قاعدة البيانات وليس هناك أي تلف أو غاب البيانات.

لماذا هناك فرق كبير في الحجم قبل وبعد الهجرة ؟

هل كانت مفيدة؟

المحلول

MongoDB لا استرداد مساحة القرص عندما في الواقع حجم البيانات قطرات بسبب حذف البيانات جنبا إلى جنب مع غيرها من الأسباب.هناك تفسير لائق في المستندات على الإنترنت:

لماذا الملفات في دليل البيانات أكبر من البيانات في قاعدة البيانات ؟

ملفات البيانات في الدليل الذي هو /data/db الدليل في التكوينات الافتراضية ، قد يكون أكبر من مجموعة البيانات المدرج في قاعدة البيانات.النظر في الأسباب المحتملة التالية:

Preallocated ملفات البيانات.

في دليل البيانات, MongoDB preallocates ملفات البيانات معين حجم جزئيا لمنع تجزئة نظام الملفات.MongoDB أسماء أول ملف البيانات .0 التالية .1, الخ.على الملف الأول mongod يخصص 64 ميغا بايت القادم 128 ميغا بايت ، وهلم جرا, تصل إلى 2 غيغابايت في النقطة اللاحقة كافة الملفات 2 غيغا بايت.ملفات البيانات تشمل الملفات مع المساحة المخصصة ولكن التي لا تحمل بيانات.mongod قد تخصص 1 غيغابايت بيانات الملف الذي قد أن 90% فارغة.بالنسبة لمعظم أكبر قواعد البيانات غير المستخدمة تخصيص مساحة صغيرة بالمقارنة مع قاعدة البيانات.

على يونكس مثل أنظمة mongod preallocates إضافية في ملف البيانات ، تهيئة القرص الفضاء إلى 0.Preallocating ملفات البيانات في الخلفية يمنع حدوث تأخيرات كبيرة عندما يكون ملف قاعدة بيانات جديد بجانب تخصيص.

يمكنك تعطيل preallocation من خلال وضع preallocDataFiles إلى false.ومع ذلك لا تعطيل preallocDataFiles لبيئات الإنتاج:فقط استخدام preallocDataFiles للاختبار مع مجموعات البيانات الصغيرة حيث كنت في كثير من الأحيان إسقاط قواعد البيانات.

على أنظمة لينكس يمكنك استخدام hdparm للحصول على فكرة عن كيف مكلفة التخصيص قد يكون:

الوقت hdparm --fallocate $((1024*1024)) testfile

على oplog.

إذا كان هذا mongod عضو مجموعة النسخ المتماثلة ، دليل البيانات يتضمن oplog.rs الملف ، وهو preallocated توج جمع في قاعدة البيانات المحلية.الافتراضي تخصيص ما يقرب من 5% من مساحة القرص على 64 بت المنشآت ، انظر Oplog التحجيم لمزيد من المعلومات.في معظم الحالات يجب أن لا تحتاج إلى تغيير حجم oplog.ومع ذلك ، إذا قمت بذلك ، انظر تغيير حجم Oplog.

المجلة.

دليل البيانات يحتوي على مجلة الملفات التي تقوم بتخزين الكتابة العمليات على القرص قبل MongoDB تطبيقها على قواعد البيانات.انظر يوميات الميكانيكا.

فارغة السجلات.

MongoDB يحافظ على قوائم فارغة السجلات في ملفات البيانات عند حذف الوثائق والمجموعات.MongoDB يمكن إعادة استخدام هذا الفضاء ، ولكن سوف لن يعود هذا الفضاء إلى نظام التشغيل.

دي-جزء التخزين المخصصة استخدام مدمج ، دي-شظايا المساحة المخصصة.دي تفتيت التخزين, MongoDB يستطيع بشكل فعال استخدام المساحة المخصصة.الاتفاق يتطلب ما يصل إلى 2 غيغابايت إضافية مساحة القرص لتشغيل.لا تستخدم المدمجة إذا كنت منخفضة بشكل كبير على مساحة القرص.

المهم

المدمجة فقط يزيل تجزئة من MongoDB ملفات البيانات و لا لن يعود أي مساحة القرص على نظام التشغيل.

استعادة حذف الفضاء استخدام repairDatabase التي rebuilds قاعدة البيانات التي de-شظايا التخزين و قد تفرج عن الفضاء نظام التشغيل.repairDatabase يتطلب ما يصل إلى 2 غيغابايت إضافية مساحة القرص لتشغيل.لا تستخدم repairDatabase إذا كنت منخفضة بشكل كبير على مساحة القرص.

http://docs.mongodb.org/manual/faq/storage/

ما لا أقول لك نوعان من طرق أخرى لاستعادة/استرداد مساحة القرص - mongodump/mongorestore كما فعلت أو إضافة عضو جديد إلى مجموعة النسخ المتماثلة مع قرص فارغ بحيث يكتب انها databsae الملفات من الصفر.

إذا كنت مهتما في رصد هذا ، ديسيبل.احصائيات() الأمر بإرجاع ثروة من البيانات على البيانات, مؤشر, تخزين أحجام الملفات:

http://docs.mongodb.org/manual/reference/command/dbStats/

نصائح أخرى

Over time the MongoDB files develop fragmentation. When you do a "migration", or whack the data directory and force a re-sync, the files pack down. If your application does a lot of deletes or updates which grow the documents fragmentation develops fairly quickly. In our deployment it is updates that grow the documents that causes this. Somehow MongoDB moves the document when it sees that the updated document can't fit in the space of the original document. There is some way to add padding factors to the collection to avoid this.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top