MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Memahami dan Mengelola Ruang Disk di Server MongoDB Anda

Penyimpanan disk adalah sumber daya penting untuk sistem basis data apa pun yang dapat diskalakan. Performa database berbasis disk Anda akan bergantung pada cara data dikelola di disk. Server MongoDB Anda mendukung berbagai mesin penyimpanan pluggable yang menangani manajemen penyimpanan dan awalnya menyimpan semua dokumen secara berurutan. Saat basis data bertambah dan beberapa operasi tulis berjalan, ruang yang berdekatan ini terfragmentasi menjadi blok yang lebih kecil dengan potongan ruang kosong di antaranya. Solusi umum adalah meningkatkan ukuran disk, namun, ada alternatif yang dapat membantu Anda mendapatkan kembali ruang kosong tanpa harus menskalakan ukuran disk. Satu hal penting yang harus diperhatikan adalah statistik penyimpanan MongoDB dan bagaimana Anda dapat memadatkan atau memperbaiki database untuk menangani fragmentasi.

Seberapa Besar Basis Data Anda, Benarkah?

Anda harus selalu mengawasi jumlah ruang disk kosong di server produksi Anda, dan juga berhati-hati untuk mengetahui ukuran basis data Anda saat Anda membayarnya di platform cloud. MongoDB memiliki perintah db.stats()  yang dapat memberikan wawasan tentang statistik penyimpanan instans MongoDB.

>db.stats()
{
	"db" : "test",
	"collections" : 5,
	"views" : 0,
	"objects" : 53829,
	"avgObjSize" : 43.555,
	"dataSize" : 2344556121,
	"storageSize" :3124416336,
	"numExtents" : 0,
	"indexes" : 7,
	"indexSize" : 8096876,
	"ok" : 1
}

ukuran data

Ukuran total dalam byte dari data yang tidak dikompres disimpan dalam database ini.

storageSize

Jumlah total ruang disk dialokasikan ke semua koleksi dalam database.

Tanggapan dari db.stats()  tergantung pada jenis mesin MongoDB. Anda dapat menemukan deskripsi yang bergantung pada versi untuk metrik di atas di dokumentasi MongoDB.

Mengapa perbedaan besar antara storageSize dan ukuran data ? Ini karena fragmentasi file data yang dijelaskan sebelumnya. MongoDB mencoba menggunakan kembali ruang kosong di antara data yang terfragmentasi bila memungkinkan dan tidak melepaskannya ke sistem operasi. Namun, di WiredTiger, storageSize mungkin lebih kecil dari dataSize jika kompresi diaktifkan.

Jika sebagian besar data dihapus dari koleksi dan koleksi tidak pernah menggunakan ruang yang dihapus untuk dokumen baru, ruang ini perlu dikembalikan ke sistem operasi agar dapat digunakan oleh database atau koleksi Anda yang lain. Anda harus menjalankan compact atau perbaiki operasi untuk mendefrag ruang disk dan mendapatkan kembali ruang kosong yang dapat digunakan.

Memadat MongoDB

Operasi ringkas MongoDB menulis ulang semua dokumen dan indeks dalam kumpulan ke blok ruang disk yang berdekatan. Namun, operasi ini memblokir semua operasi lain pada database tempat koleksi tersebut berada. Jadi, untuk server mandiri, disarankan untuk menjalankannya selama masa pemeliharaan, dan untuk set replika, Anda harus menjalankannya secara bergulir untuk setiap pecahan. Ini berarti memadatkan semua sekunder terlebih dahulu, lalu terakhir primer sehingga ketersediaan database Anda tidak terpengaruh. Sintaks perintahnya adalah:

db.runCommand({compact: collection-name })

1. MMAPv1

  • Operasi pemadatan mendefrag file &indeks data. Namun, perlu diingat bahwa itu tidak melepaskan ruang ke sistem operasi. Operasi ini masih berguna untuk mendefrag dan membuat lebih banyak ruang yang berdekatan untuk digunakan kembali oleh MongoDB, tetapi tidak ada gunanya jika ruang disk kosong sangat rendah.
  • Ruang disk tambahan hingga 2 GB  diperlukan selama operasi pemadatan.
  • Penguncian tingkat basis data ditahan selama operasi pemadatan.

2. WiredTiger

Mesin WiredTiger menyediakan kompresi secara default yang menghabiskan lebih sedikit ruang disk daripada MMAPv1.

  • Proses ringkas melepaskan ruang kosong ke sistem operasi.
  • Ruang disk minimal diperlukan untuk menjalankan operasi ringkas.
  • WiredTiger juga memblokir semua operasi pada database karena memerlukan kunci level database.

Jika Anda menjalankan WiredTiger, kami sarankan Anda menjalankan operasi ringkas saat penyimpanan telah mencapai 80% dari ukuran disk. Anda dapat melakukannya dengan memicu operasi 'Ringkas' dari halaman detail kami.

Perbaiki MongoDB

MongoDB perbaikan operasi memperbaiki semua kesalahan dan inkonsistensi dalam penyimpanan data, mirip dengan perintah fcsk untuk sistem file. Perintah ini memastikan integritas data setelah shutdown atau crash yang tidak terduga. Namun, jika penjurnalan diaktifkan di server, maka tidak ada persyaratan perbaikan karena server menggunakan jurnal untuk masuk ke status bersih secara otomatis setelah restart. Jika database Anda telah rusak, maka perbaiki database tidak akan menyimpan data yang rusak, jadi tidak disarankan untuk menggunakan operasi ini untuk pemulihan data ketika Anda memiliki pilihan lain.

Untuk MMAPv1,  perbaiki database adalah satu-satunya cara untuk mendapatkan kembali ruang disk jika menurut Anda database Anda belum rusak dan memiliki cukup ruang yang diperlukan oleh operasi perbaikan. Sintaks perintahnya adalah:

db.runCommand({repairDatabase: 1})
  • Perintah ini memadatkan semua koleksi dalam database dan membuat ulang semua indeks.
  • Pekerjaan ini membutuhkan ruang disk kosong yang sama dengan ukuran set data Anda saat ini ditambah 2 gigabita.

Di ScaleGrid, kami menggunakan repairDatabase operasi untuk mendapatkan kembali ruang kosong untuk MMAPv1 kluster mesin.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB Java Inserting Throws org.bson.codecs.configuration.CodecConfigurationException:Tidak dapat menemukan codec untuk kelas io.github.ilkgunel.mongodb.Pojo

  2. Berurusan dengan perubahan skema di Mongoose

  3. MongoDB $persegi

  4. Memvalidasi keunikan dokumen yang disematkan yang dicakup oleh induknya di luwak

  5. Apa jalur database default untuk MongoDB?