全部产品
Search
文档中心

ApsaraDB for MongoDB:Rilis disk space instans ApsaraDB for MongoDB

更新时间:Mar 01, 2026

Menghapus dokumen dari instans ApsaraDB for MongoDB tidak serta-merta membebaskan disk space. Topik ini menjelaskan tiga metode untuk mereklaim disk space yang tidak terpakai. Anda dapat menggunakan metode-metode ini secara terpisah atau dalam kombinasi.

Background

ApsaraDB for MongoDB menggunakan WiredTiger sebagai mesin penyimpanan default mulai dari MongoDB 3.2. Parameter storage.directoryPerDB:true diaktifkan, sehingga setiap database disimpan sebagai folder terpisah pada disk dan setiap koleksi disimpan sebagai file terpisah di dalam folder tersebut. Untuk informasi lebih lanjut, lihat storage.directoryPerDB.

Saat Anda menjalankan perintah delete, WiredTiger menandai ruang penyimpanan sebagai bebas untuk digunakan kembali, bukan mengembalikannya ke sistem operasi. Perilaku ini mirip dengan cara MySQL menangani baris yang dihapus. Penggunaan disk tidak berkurang setelah penghapusan dokumen.

Untuk mereklaim disk space, gunakan salah satu metode berikut.

Metode 1: Drop indeks, koleksi, atau database yang tidak digunakan

Drop indeks, koleksi, atau database akan segera menghapus file yang mendasarinya dan langsung membebaskan disk space.

  1. Identifikasi indeks, koleksi, atau database yang tidak digunakan.

  2. Jalankan perintah yang sesuai:

    • dropIndexes untuk menghapus indeks yang tidak digunakan

    • drop untuk menghapus koleksi yang tidak digunakan

    • dropDatabase untuk menghapus database yang tidak digunakan

Disk space akan dilepas segera setelah perintah selesai dijalankan.

Metode 2: Compact koleksi untuk mereklaim ruang bebas

Setelah menghapus sejumlah besar dokumen, jalankan perintah compact untuk mereklaim ruang yang telah dibebaskan dalam suatu koleksi. Pertama, periksa berapa banyak ruang bebas yang tersedia.

Periksa ruang bebas

Jalankan perintah collStats dan bandingkan bidang StorageSize dan freeStorageSize. Nilai freeStorageSize yang besar relatif terhadap StorageSize menunjukkan adanya ruang signifikan yang dapat direklaim.

Jalankan perintah compact

Jalankan perintah compact pada setiap koleksi yang memiliki ruang bebas signifikan. Untuk instruksi lengkap, lihat Defragment a disk to improve disk usage.

Penting

Jalankan perintah compact pada setiap node secara terpisah. Dalam replica set, compact satu node dalam satu waktu. Pada node primary, tambahkan force: true ke dalam perintah, contohnya: db.runCommand({compact: "collectionName", force: true}).

Peringatan

Pada versi MongoDB sebelum 4.4, perintah compact memblokir semua operasi lainnya. Lakukan dengan hati-hati.

Metode 3: Copy dokumen ke koleksi baru (hanya offline)

Alih-alih menjalankan compact, salin semua dokumen ke koleksi baru lalu ubah namanya. Pendekatan ini hanya berlaku dalam skenario offline karena memerlukan akses eksklusif ke data.

  1. Gunakan metode cursor.forEach untuk melakukan iterasi melalui koleksi sumber dan memasukkan setiap dokumen ke dalam koleksi baru.

  2. Drop koleksi asli untuk membebaskan disk space.

  3. Ubah nama koleksi baru agar sesuai dengan nama koleksi aslinya.

Catatan

Metode ini memerlukan downtime aplikasi. Gunakan Metode 2 (compact) untuk skenario online.

Lihat juga