Bagaimanakah mongodb menuntut semula ruang yang sepatutnya dikosongkan selepas dokumen "mengecilkan"?
漂亮男人
漂亮男人 2017-05-02 09:24:24
0
2
599

Versi yang digunakan ialah mongodb-win32-x86_64-3.2.1, dan enjin storan WiredTiger lalai digunakan.

Terdapat kira-kira 4 juta dokumen dalam koleksi, menempati 40G ruang kemudiannya, bahagian yang tidak berguna bagi setiap pemprosesan dokumen telah dilalui dan dikemas kini (dokumen itu tidak dipadamkan dan disiapkan seperti yang dijadualkan). . Menurut statistik keluarannya, dokumen Pengurangan keseluruhan telah dikurangkan kepada kira-kira 45% daripada yang asal, yang bermaksud bahawa lebih daripada 20G ruang telah dibebaskan Walau bagaimanapun, saiz fail pangkalan data tidak menjadi lebih kecil, tetapi telah meningkat sedikit (kira-kira 1%).

Baca bab tentang penyimpanan dalam dokumen, https://docs.mongodb.com/v3.2...,其中提到删除文档导致的空记录占用空间可通过compact回收(使用WiredTiger存储引擎时),没提到前述这种修改文档形成的“虚占空间”的情形,我运行了compact,几秒钟就结束了,存储文件没有变小。那么该怎么办呢?

> use cache
switched to db cache
> db.htmldocs.runCommand("compact")
{ "ok" : 1 }
> db.runCommand({compact: "htmldocs"})
{ "ok" : 1 }
漂亮男人
漂亮男人

membalas semua(2)
左手右手慢动作

Ya, jika WT menggunakan versi terkini compact ia sememangnya boleh menuntut semula ruang, tetapi disebabkan pepijat ini akan berkuat kuasa selepas versi 3.2.2 tertentu saya tidak ingat nombor versi tertentu (3.2.9? ). Tetapi sudah pasti bahawa 3.2.1 pastinya tidak sah, dan menaik taraf kepada versi 3.2.12 yang terkini pasti akan menyelesaikan masalah ini.
Berbanding dengan repairDatabase, compact nampaknya lebih ringan, tetapi masalah yang tidak dapat dielakkan ialah ia masih merupakan operasi yang berat. Bayangkan defragmentasi cakera dalam Windows, prinsipnya adalah sama. Pendekatan yang lebih disyorkan dan kurang memberi kesan ialah menggunakan set replika untuk melancarkan semula semua nod secara bergulir dan ruang boleh dilepaskan.

Persoalan yang lebih penting ialah, adakah menuntut semula ruang ini benar-benar masuk akal untuk anda? Selalunya, hakikat bahawa sistem telah menduduki ruang ini bermakna ia berkemungkinan akan menduduki ruang ini semula (melainkan terdapat perubahan dalam reka bentuk sistem). Daripada melepaskannya dan mengagihkannya semula kemudian, lebih baik menyimpannya di sana dan sistem akan menggunakannya semula.

伊谢尔伦

Berikut adalah pemahaman saya:

1. Padat satu koleksi tidak akan menuntut semula ruang storan sistem fail; hanya db.repairDatabase() daripada keseluruhan pangkalan data boleh menuntut semula ruang storan sistem fail. Sila cuba gunakan repirDatabase().

2. Anda juga boleh menggunakan kaedah pengumpulan eksport/import

Berhati-hati dengan kesan operasi di atas terhadap prestasi sistem. Untuk rujukan.

Saya sedang bercuti hari ini, dan saya ucapkan selamat bercuti Festival Musim Bunga terlebih dahulu.

Sayangi MongoDB!

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan