All Products
Search
Document Center

ApsaraDB for MongoDB:Pemanfaatan disk space tinggi pada instans MongoDB

Last Updated:Jul 18, 2026

Pemanfaatan disk space merupakan metrik kritis untuk instans ApsaraDB for MongoDB. Jika suatu instans kehabisan disk space, instans tersebut menjadi tidak tersedia. Pelajari cara memeriksa penggunaan disk space, mengidentifikasi penyebab pemanfaatan tinggi, dan menerapkan strategi optimasi.

Informasi latar belakang

Jika pemanfaatan disk space mencapai 80% atau lebih, kurangi konsumsi ruang aktual database atau perluas kapasitas penyimpanan untuk mencegah instans penuh.

Periksa penggunaan ruang

Arsitektur set replika

Jika instans ApsaraDB for MongoDB Anda menggunakan arsitektur set replika, login ke Konsol ApsaraDB for MongoDB dan gunakan metode berikut untuk memeriksa penggunaan ruangnya:

  • Ikhtisar

    Pada halaman Basic Information, buka bagian Specification Information untuk melihat Disk space dan Usage instans.

  • Analisis grafik pemantauan

    Di panel navigasi sebelah kiri, klik Monitoring Information. Pilih node target untuk melihat Disk Usage (Bytes) dan Disk Usage (%)-nya.

    Instans set replika ApsaraDB for MongoDB terdiri dari satu node primary untuk operasi baca dan tulis, satu atau beberapa node secondary untuk high availability, satu node hidden, dan opsional node read-only. Penggunaan ruang setiap node terdiri dari data_size dan log_size, dengan ins_size = data_size + log_size:

    • data_size: Ruang disk yang digunakan oleh data, tidak termasuk database local. Ini mencakup file data (dengan awalan collection), file indeks (dengan awalan index), dan file metadata seperti WiredTiger.wt.

    • log_size: Ukuran fisik database local, ukuran log waktu proses MongoDB, dan ukuran beberapa log audit.

  • Analisis mendetail

    Gunakan metode berikut untuk melakukan analisis mendetail penggunaan ruang:

    • Gunakan perintah native MongoDB db.stats() dan db.$collection_name.stats().

      Untuk informasi lebih lanjut tentang perintah ini, lihat dokumentasi MongoDB berikut:

    • Gunakan halaman CloudDBA > Storage Analysis.

      Di halaman CloudDBA > Storage Analysis, Anda dapat melihat informasi berikut:

      • Ikhtisar penggunaan ruang untuk database dan koleksi, pertumbuhan harian rata-ratanya, serta prediksi jumlah hari hingga penyimpanan penuh.

      • Penggunaan ruang database dan tabel yang anomali.

      • Penggunaan ruang mendetail untuk koleksi bisnis, termasuk ukuran file indeks, ukuran file data, analisis rasio kompresi, dan ukuran dokumen rata-rata.

Arsitektur kluster sharded

Jika instans ApsaraDB for MongoDB Anda menggunakan arsitektur kluster sharded, login ke Konsol ApsaraDB for MongoDB dan gunakan metode berikut untuk memeriksa penggunaan ruangnya:

  • Analisis grafik pemantauan

    Di halaman Monitoring Information, pilih node target untuk melihat Disk Usage (Bytes) dan Disk Usage (%)-nya.

  • Analisis mendetail

    Lakukan analisis berurutan penggunaan ruang setiap node dengan menggunakan perintah native MongoDB db.stats() dan db.$collection_name.stats().

Pemanfaatan ruang tinggi akibat fragmentasi data

Dampak pada instans selama kompaksi

Operasi compact dapat memakan waktu lama karena durasinya sebanding dengan ukuran koleksi. Untuk menghindari gangguan pada operasi baca dan tulis, jalankan compact pada jam sepi.

Metode compact

Untuk meminimalkan dampak pada bisnis Anda, pertama-tama jalankan perintah db.runCommand({compact:"collectionName"}) pada node secondary, lalu lakukan alih bencana primary/secondary. Ganti collectionName dengan nama koleksi Anda.

Untuk informasi lebih lanjut tentang cara menggunakan perintah compact, lihat Defragmentasi disk untuk meningkatkan pemanfaatan disk.

Peningkatan penggunaan ruang akibat log besar

Kesenjangan ruang akibat journal log besar

Pada versi ApsaraDB for MongoDB sebelum 4.0, jika jumlah file terbuka pada mesin host mencapai batasnya, thread pembersihan log server internal terganggu dan journal log terus bertambah tanpa batas. Jika Anda melihat entri log seperti berikut dalam log waktu proses MongoDB, upgrade kernel ke ApsaraDB for MongoDB 4.0 atau versi lebih baru. Sebagai solusi sementara, restart proses mongod. Untuk detail lebih lanjut, lihat log-server thread exit quietly on error while the mongodb process still running.

2019-08-25T09:45:16.867+0800 I NETWORK [thread1] Listener: accept() returns -1 Too many open files in system 
2019-08-25T09:45:17.000+0800 I - [ftdc] Assertion: 13538:couldn't open [/proc/55692/stat] Too many open files in system src/mongo/util/processinfo_linux.cpp 74
2019-08-25T09:45:17.002+0800 W FTDC [ftdc] Uncaught exception in 'Location13538: couldn't open [/proc/55692/stat] Too many open files in system' in full-time diagnostic data capture subsystem. Shutting down the full-time diagnostic data capture subsystem.

Pertumbuhan log akibat keterlambatan replikasi dan backup

Saat instans ApsaraDB for MongoDB mengalami keterlambatan replikasi, ukuran oplog yang dapat digunakan tidak lagi dibatasi oleh koleksi berukuran tetap yang didefinisikan dalam file konfigurasi. Secara teori, ukurannya dapat mencapai 20% dari kapasitas disk yang disediakan. Setelah keterlambatan terselesaikan, ruang tambahan yang ditempati oleh oplog tidak secara otomatis dikembalikan.

Selama backup fisik, instans ApsaraDB for MongoDB pada node hidden menghasilkan banyak checkpoint, sehingga mengonsumsi lebih banyak ruang data dan log.

Untuk kedua skenario tersebut, Anda dapat mengatasi masalah ini dengan menjalankan operasi compact pada oplog:

Catatan

Semua operasi tulis diblokir selama operasi compact.

db.grantRolesToUser("root", [{db: "local", role: "dbAdmin"}])
use local
db.runCommand({ compact: "oplog.rs", force: true })

Ketidakseimbangan data akibat sharding yang tidak tepat

Jenis kunci shard yang tidak sesuai

Pada kluster sharded, pemilihan jenis kunci shard sangat penting. Dua jenis utama adalah sharding hash dan sharding berbasis rentang. Untuk penyeimbangan disk, sharding hash sering kali merupakan strategi yang lebih baik daripada sharding berbasis rentang karena ApsaraDB for MongoDB menggunakan fungsi hash internal untuk mendistribusikan data secara merata ke seluruh shard berdasarkan nilai kunci. Sebaliknya, sharding berbasis rentang mendistribusikan data berdasarkan rentang nilai kunci, yang dapat memusatkan data baru pada satu chunk "panas", menyebabkan I/O disk tinggi pada shard tersebut dan ketidakseimbangan data jangka pendek.

Catatan

Untuk informasi lebih lanjut tentang jenis kunci shard, lihat sharding-shard-key, hashed-sharding, dan ranged-sharding.

Bidang kunci shard yang tidak sesuai

Meskipun jumlah chunk pada setiap shard mungkin serupa, sebagian besar data terkonsentrasi pada beberapa chunk saja. Akibatnya, shard yang berisi chunk "panas" ini menyimpan data jauh lebih banyak daripada shard lainnya. Saat Anda menjalankan perintah sh.status() dan memeriksa log waktu proses ApsaraDB for MongoDB, Anda mungkin melihat pesan peringatan seperti berikut:

2019-08-27T13:31:22.076+0800 W SHARDING [conn12681919] possible low cardinality key detected in superHotItemPool.haodanku_all - key is { batch: "201908260000" } 
2019-08-27T13:31:22.076+0800 W SHARDING [conn12681919] possible low cardinality key detected in superHotItemPool.haodanku_all - key is { batch: "201908260200" } 
2019-08-27T13:31:22.076+0800 W SHARDING [conn12681919] possible low cardinality key detected in superHotItemPool.haodanku_all - key is { batch: "201908260230" }

Balancer mongos terutama mempertimbangkan jumlah chunk pada setiap shard untuk menentukan apakah data seimbang. Hal ini dapat menyebabkan skenario di mana jumlah chunk seimbang tetapi distribusi data aktual sangat condong. Ini terjadi karena nilai kunci shard dalam satu chunk hampir identik. Saat chunk mencapai ambang batas pemisahan 64 MB, MongoDB memisahkannya dan membuat chunk kosong. Seiring waktu, meskipun jumlah chunk meningkat dan migrasi terjadi, chunk yang dimigrasikan sering kali kosong—menghasilkan jumlah chunk seimbang tetapi data tidak seimbang. Untuk memperbaiki ini, rancang ulang strategi sharding Anda agar menggunakan bidang dengan kardinalitas tinggi sebagai kunci shard.

Catatan

Untuk informasi lebih lanjut tentang pemisahan, lihat sharding-data-partitioning dan split-chunks-in-sharded-cluster.

Database tidak di-shard dalam kluster sharded

Instans kluster sharded ApsaraDB for MongoDB mendukung database yang di-shard maupun tidak di-shard. Semua data dari database yang tidak di-shard berada pada satu shard utama, sehingga jika database tersebut besar, shard utamanya mungkin menyimpan data jauh lebih banyak daripada shard lainnya.

Masalah ini juga dapat terjadi saat Anda mengimpor data dari kluster mongos sumber ke kluster baru tetapi lupa mengonfigurasi sharding pada kluster tujuan sebelum impor.

Untuk mengatasi masalah ini, kami merekomendasikan hal berikut:

  • Jika Anda menginisialisasi kluster tujuan dengan impor, rancang dan aktifkan sharding sebelum memulai.

  • Jika Anda memiliki banyak database tidak di-shard dengan ukuran yang kira-kira sama, gunakan perintah movePrimary untuk memindahkan database tertentu ke shard berbeda.

  • Jika terdapat database tidak di-shard yang sangat besar, kami merekomendasikan untuk meng-shard-nya atau memigrasikannya ke instans set replika mandiri.

  • Jika situasi ini terjadi tetapi Anda memiliki ruang disk yang cukup, Anda dapat memilih untuk mengabaikan masalah ini.

Penggunaan disk tidak merata akibat operasi moveChunk

Operasi moveChunk menulis data ke shard tujuan lalu menghapusnya dari shard sumber. Secara default, operasi penghapusan tidak melepaskan ruang disk. Pada engine WiredTiger, setiap koleksi memiliki file data dan indeks terpisah, dan total ruang disk tidak berkurang kecuali file-file tersebut dihapus. Masalah ini paling umum terjadi saat sharding diaktifkan pada kluster yang telah berjalan lama tanpa desain sharding.

Oleh karena itu, setelah banyak operasi moveChunk atau penghapusan dokumen, jalankan operasi compact pada shard yang terpengaruh untuk mengembalikan ruang yang terfragmentasi.

Catatan

Untuk informasi lebih lanjut tentang moveChunk, lihat migrate-chunks-in-sharded-cluster dan manage-sharded-cluster-balancer.