Halo, kalau kamu merasa tulisan saya ngebantu kamu, kamu bisa ucapkan terima kasih lewat saweria .

If you feel this website help you, you can donate at saweria .



What I Used in This Tutorial

  1. Ubuntu Server 22.04 LTS

  2. Standalone MongoDB v5.0.19


How To

Compact ini merupakan command bawaan mongo yang berfungsi mirip dengan defrag disk.

Compact ini akan rewrites and defrag semua data dan index di collection. Tentu saja dengan menjalankan compact ini akan membuat free space di hard drive.

Berikut cara menggunakan compact

  1. Login ke MongoDB, dengan menggunakan mongo shell
mongosh  --quiet  --host localhost:27017 --username administrator --password Password  --authenticationDatabase admin 
  1. Cek collection yang ingin di compact,
#show all collection
show collections

#show collection using regex, in this case i search collection that contain "wall"
db.getCollectionNames().filter(function (collection) { return /wall/.test(collection) })
  1. compact collection dengan
db.runCommand( { compact : 'wallet' } )
Proses compact Collection

Proses compact Collection


Run compact di MongoDB Replica Set Production

Pengalaman saya menjalankan compact di production

  1. Menjalankan compact di primary
Ada Pesan compact Bakal Bikin Slow Operation

Ada Pesan compact Bakal Bikin Slow Operation

Karena ada warning itu compact di primary ga jadi saya jalankan

  1. Menjalankan compact di secondary
Running compact di Secondary Ga Ada Warning

Running compact di Secondary Ga Ada Warning

Saya jalankan compact di secondary di production ini ga ada masalah, tapi hanya bisa bikin free space sekitar 300 MB


Tambahan

  1. cara compact semua collection (anda bisa cek full script di sini Github Gist - Compact all collections inside of a MongoDB database )
use testDbName;
db.getCollectionNames().forEach(function (collectionName) {
    print('Compacting: ' + collectionName);
    db.runCommand({ compact: collectionName });
});
Disk Size Before Run compact

Disk Size Before Run compact

Disk Size After Run compact, it free 12GB!

Disk Size After Run compact, it free 12GB!

  1. Jika ada error “Not authorized on config to execute command { compact: ..} “, itu berarti user yang gunakan untuk menjalankan compact tidak punya akses write ke database. Untuk cara memperbaikinya, buat user yang punya akses write ke database
#add root user
use admin;
db.createUser(
  {
    user: "user",
    pwd: "pass",
    roles: [ "root" ]
  }
);

#create new user with read write access
use database;
db.createUser(
  {
    user: "user",
    pwd: "pass",
    roles: [ { role: "readWrite", db: "database" } ]
  }
);

#grant/update access root to admin
use admin;
db.grantRolesToUser('admin', [{ role: 'root', db: 'admin' }])

Referensi:

  1. Create root user on MongoDB

  2. MongoDB Manual - Command Compact

  3. Github Gist - Compact all collections inside of a MongoDB database

  4. Alibaba Cloud - Let’s Talk about MongoDB’s Compact Command