ทำไมหลังจากลบคอลเลกชัน 110+ GB แล้วไดเรกทอรี / var / lib / mongodb ของฉันยังมีขนาดเท่ากัน


12

ฉันมีปัญหากับ MongoDB และการใช้พื้นที่ โดยเฉพาะอย่างยิ่งฉันเคยมีชุดใหญ่ประมาณ 600 ล้านบันทึกรวม 110+ GB บนดิสก์ เมื่อเร็ว ๆ นี้ฉันตัดสินใจที่จะทิ้งเพราะข้อมูลล้าสมัยฉันจึงทิ้งคอลเล็กชันผ่านเว็บอินเตอร์เฟสของ rockmongo rockmongo ไม่แสดงคอลเลคชั่นให้ฉันอีกต่อไปอย่างไรก็ตามการใช้งานดิสก์ของฉันไม่ได้เปลี่ยนแปลงเลย

มีการดำเนินการใหม่ทั้งหมดที่ฉันไม่ทราบหรือไม่ซึ่งจะต้องเรียกใช้เพื่อซิงโครไนซ์ฐานข้อมูลกับไฟล์ฐานข้อมูลบนดิสก์

ฉันได้ลองทำการ "ซ่อมแซม" แต่ระบบบ่นว่ามีพื้นที่ไม่เพียงพอบนดิสก์ ... นั่นเป็นเพราะ MongoDB ใช้ทั้งหมด

คำตอบ:


19

เช่นเดียวกับระบบฐานข้อมูลส่วนใหญ่ไฟล์ฐานข้อมูลจะไม่ลดขนาดเมื่อคุณลบข้อมูลข้อมูลเพิ่งถูกลบ / ทำเครื่องหมายว่าถูกลบและพื้นที่จะถูกนำกลับมาใช้ใหม่

คุณจะต้องเรียกใช้db.repairDatabase()พื้นที่ขนาดกะทัดรัดดังที่ระบุไว้ที่นี่


2
พื้นที่ว่างในฮาร์ดดิสก์ต่ำเกินไปที่จะทำเช่นนั้น mongodumpแต่ฉันจะแก้ไขด้วยวิธีนี้: oldDatabase.dropDatabase(), mongorestore --db newDatabase dump/oldDatabase,
tunnuz

5

ในขณะที่วิธีการ mongodump / drop / mongorestore ข้างต้นจะทำงานได้ดีจากมุมมองทางเทคนิคคุณจะต้องใช้ฐานข้อมูลออฟไลน์ในขณะที่คุณทำเช่นนั้นซึ่งจะเป็นเหตุการณ์ที่กระทบกับบริการ

หากคุณต้องการทำสิ่งนี้โดยไม่หยุดทำงานและหากคุณใช้ MongoDB Replica Sets [1] คุณสามารถทำได้ดังนี้

  1. เลือกสมาชิกและหยุด MongoDB ที่นั่น (หยุดการบริการ mongodb) หากนี่เป็นรายการหลักให้รอสมาชิกคนอื่นเพื่อรับการเลือกตั้งระดับต้น
  2. ลบไฟล์ข้อมูลบนสมาชิกนี้ (cd / var / lib / mongodb; rm *)
  3. เริ่มบริการ MongoDB อีกครั้ง (เริ่มบริการ MongoDB)
  4. รอให้สมาชิกทำการซิงค์กับ Primary (rs.status ()) อีกครั้ง
  5. สิ่งนี้จะสร้างเฉพาะไฟล์ข้อมูลที่ต้องการ (เล็กกว่า)

จากนั้นทำซ้ำขั้นตอนข้างต้นสำหรับสมาชิกคนอื่น ๆ ในชุดแบบจำลอง

[1] https://docs.mongodb.org/manual/tutorial/deploy-replica-set )


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.