มีความสับสนอย่างมากเกี่ยวกับการเรียกคืนพื้นที่ใน MongoDB และการปฏิบัติที่แนะนำบางอย่างเป็นอันตรายอย่างยิ่งที่จะทำในการปรับใช้บางประเภท รายละเอียดเพิ่มเติมด้านล่าง:
TL; DR repairDatabase
พยายามกู้ข้อมูลจากการปรับใช้ MongoDB แบบสแตนด์อโลนที่พยายามกู้คืนจากความเสียหายของดิสก์ ถ้ามันกู้คืนพื้นที่มันเป็นอย่างหมดจดผลข้างเคียง repairDatabase
การกู้คืนพื้นที่ไม่ควรพิจารณาหลักของการทำงาน
กู้คืนพื้นที่ในโหนดสแตนด์อะโลน
WiredTiger:สำหรับโหนดแบบสแตนด์อโลนที่มี WiredTiger การรันcompact
จะปล่อยพื้นที่ไปยัง OS ด้วยหนึ่ง caveat: compact
คำสั่งบน WiredTiger บน MongoDB 3.0.x ได้รับผลกระทบจากข้อผิดพลาดนี้: SERVER-21833ซึ่งได้รับการแก้ไขใน MongoDB 3.2.3 ก่อนหน้าเวอร์ชันนี้compact
บน WiredTiger อาจล้มเหลวอย่างเงียบ ๆ
MMAPv1:เนื่องจากวิธีการทำงานของ MMAPv1 จึงไม่มีวิธีที่ปลอดภัยและได้รับการสนับสนุนในการกู้คืนพื้นที่โดยใช้เอ็นจิ้นการจัดเก็บ MMAPv1 compact
ใน MMAPv1 จะจัดเรียงไฟล์ข้อมูลอาจทำให้มีพื้นที่มากขึ้นสำหรับเอกสารใหม่ แต่จะไม่ปล่อยพื้นที่กลับสู่ระบบปฏิบัติการ
คุณอาจจะสามารถทำงานได้repairDatabase
ถ้าคุณเข้าใจผลกระทบของการนี้อาจเป็นอันตรายคำสั่ง (ดูด้านล่าง) ตั้งแต่repairDatabase
หลักปรับเปลี่ยนฐานข้อมูลทั้งหมดโดยทิ้งเอกสารเสียหาย ในฐานะที่เป็นผลข้างเคียงนี้จะสร้างไฟล์ข้อมูล MMAPv1 ใหม่โดยไม่มีการแยกส่วนใด ๆ บนมันและปล่อยพื้นที่กลับสู่ระบบปฏิบัติการ
สำหรับวิธีการผจญภัยที่น้อยกว่าการรันmongodump
และmongorestore
อาจทำได้เช่นกันในการปรับใช้ MMAPv1 ขึ้นอยู่กับขนาดของการปรับใช้ของคุณ
กู้คืนพื้นที่ในชุดแบบจำลอง
สำหรับการกำหนดค่าชุดแบบจำลองวิธีที่ดีที่สุดและปลอดภัยที่สุดในการกู้คืนพื้นที่คือทำการซิงค์เริ่มต้นสำหรับทั้ง WiredTiger และ MMAPv1
หากคุณต้องการกู้คืนพื้นที่จากโหนดทั้งหมดในชุดคุณสามารถทำการซิงค์เริ่มต้น นั่นคือทำการซิงค์เริ่มต้นในแต่ละวินาทีก่อนที่จะหยุดการทำงานหลักและทำการซิงค์เริ่มต้น การหมุนวิธีการซิงค์เริ่มต้นเป็นวิธีที่ปลอดภัยที่สุดในการบำรุงรักษาชุดจำลองและยังไม่เกี่ยวข้องกับการหยุดทำงานเป็นโบนัส
โปรดทราบว่าความเป็นไปได้ในการทำการซิงค์เริ่มต้นจะขึ้นอยู่กับขนาดของการปรับใช้ของคุณด้วย สำหรับการปรับใช้ที่มีขนาดใหญ่มากอาจไม่สามารถทำการซิงค์เริ่มต้นได้ดังนั้นตัวเลือกของคุณจึงค่อนข้าง จำกัด หาก WiredTiger จะใช้คุณอาจจะสามารถที่จะใช้เวลาหนึ่งออกรองของชุดเริ่มต้นมันเป็นแบบสแตนด์อโลนทำงานcompact
ในนั้นและกลับไปยังที่ตั้งไว้
เกี่ยวกับ repairDatabase
กรุณาอย่าเรียกใช้repairDatabase
บนโหนดชุดแบบจำลอง สิ่งนี้เป็นสิ่งที่อันตรายอย่างมากดังที่กล่าวไว้ในหน้าซ่อมแซมฐานข้อมูลและอธิบายรายละเอียดเพิ่มเติมด้านล่าง
ชื่อrepairDatabase
นี้ทำให้เข้าใจผิดเล็กน้อยเนื่องจากคำสั่งไม่พยายามซ่อมแซมอะไร คำสั่งมีวัตถุประสงค์เพื่อใช้เมื่อมีความเสียหายของดิสก์ในโหนดแบบสแตนด์อโลนซึ่งอาจนำไปสู่เอกสารที่เสียหาย
repairDatabase
คำสั่งสามารถอธิบายได้ถูกต้องมากขึ้นเป็น "กอบกู้ฐานข้อมูล" นั่นคือมันจะสร้างฐานข้อมูลขึ้นใหม่โดยการทิ้งเอกสารที่เสียหายในความพยายามที่จะทำให้ฐานข้อมูลเข้าสู่สถานะที่คุณสามารถเริ่มต้นและกู้เอกสารที่ไม่เสียหายจากมันได้
ใน MMAPv1 ปรับใช้นี้สร้างใหม่ของพื้นที่ไฟล์ฐานข้อมูลเผยแพร่ระบบปฏิบัติการเป็นผลข้างเคียง การปล่อยพื้นที่ให้กับระบบปฏิบัติการไม่ได้เป็นไปตามวัตถุประสงค์
ผลที่ตามมาของrepairDatabase
ชุดแบบจำลอง
ในชุดเรพลิกา MongoDB คาดว่าโหนดทั้งหมดในชุดจะมีข้อมูลที่เหมือนกัน หากคุณรันrepairDatabase
บนโหนดชุดเรพลิกามีโอกาสที่โหนดจะมีความเสียหายที่ตรวจไม่พบและrepairDatabase
จะลบเอกสารที่เสียหายให้คุณตามหน้าที่
คาดการณ์สิ่งนี้ทำให้โหนดนั้นมีชุดข้อมูลที่แตกต่างจากส่วนที่เหลือของชุด หากมีการอัพเดทเกิดขึ้นกับเอกสารฉบับเดียวชุดทั้งชุดอาจมีปัญหา
การทำให้เรื่องแย่ลงเป็นไปได้อย่างยิ่งที่สถานการณ์นี้อาจอยู่เฉยๆเป็นเวลานานเพียงเพื่อจู่โจมทันทีโดยไม่มีเหตุผลชัดเจน