All Products
Search
Document Center

ApsaraDB for MongoDB:Fitur baru MongoDB 8.0

Last Updated:Mar 29, 2026

MongoDB 8.0 menghadirkan peningkatan performa signifikan dan kemampuan baru di berbagai aspek, termasuk manajemen memori, replikasi, sharding, agregasi, dan keamanan. Topik ini merangkum perubahan utama untuk membantu Anda mengevaluasi upgrade dan memahami dampaknya terhadap aplikasi Anda.

Untuk changelog lengkap dari upstream, lihat catatan rilis MongoDB 8.0.

Advanced TCMalloc

MongoDB 8.0 mengganti alokator memori sebelumnya dengan Advanced TCMalloc yang mengurangi fragmentasi memori dan mempertahankan performa di bawah beban berat. Dua perubahan utama mendorong peningkatan ini:

  • Per-CPU caching: Advanced TCMalloc menggunakan cache per inti CPU alih-alih per thread, sehingga mengurangi fragmentasi memori dan memungkinkan database menangani workload konkuren yang lebih tinggi.

  • Background memory release: Sebuah thread latar belakang mencoba melepaskan memori yang tidak digunakan kembali ke sistem operasi setiap detik.

Parameter tcmallocReleaseRate mengontrol laju pelepasan dalam byte/detik. Sebelum MongoDB 8.0, parameter ini menerima rentang nilai samar 1–10. Di ApsaraDB for MongoDB, nilai default-nya adalah 10485760 (10 MB). Bahkan ketika diatur ke 0, alokator tetap melepaskan sebagian memori. Sesuaikan nilai ini berdasarkan kebutuhan workload Anda.

Performa replikasi

Perubahan perilaku write concern "Majority"

Mulai MongoDB 8.0, ketika writeConcern diatur ke majority, MongoDB mengakui penulisan setelah entri oplog ditulis ke mayoritas anggota replica set — tanpa menunggu anggota tersebut menerapkan perubahan tersebut. Hal ini meningkatkan throughput penulisan dalam mode majority.

Dampak potensial: Jika aplikasi Anda membaca dari node secondary segera setelah menerima acknowledgment penulisan majority, kueri tersebut mungkin mengembalikan hasil yang tidak mencakup perubahan dari penulisan tersebut.

Penulisan dan penerapan oplog secara paralel

Node secondary kini menulis dan menerapkan batch oplog secara paralel:

  • Sebuah Writer thread membaca entri oplog baru dari node primary dan menuliskannya ke oplog lokal.

  • Sebuah Applier thread menerapkan perubahan tersebut ke database lokal secara asinkron.

Hal ini meningkatkan throughput replikasi pada node secondary. Metrik serverStatus terkait kini dilaporkan sebagai metrics.repl.buffer.write dan metrics.repl.buffer.apply.

Performa resharding

reshardCollection jauh lebih cepat di MongoDB 8.0. Opsi baru forceRedistribution memungkinkan Anda melakukan resharding koleksi menggunakan kunci shard yang sudah ada dan mendistribusikan ulang data ke shard baru. Proses ini lebih cepat dibandingkan migrasi chunk ke rentang tertentu. Gabungkan forceRedistribution dengan opsi zones untuk memigrasikan data ke zona tertentu.

db.adminCommand({
    reshardCollection: "db.coll",
    key: { shard_key: "hashed" },
    forceRedistribution: true
})
Catatan

Pembuatan indeks selama resharding dapat menyebabkan pembuatan indeks gagal diam-diam, tanpa pesan error eksplisit. Selesaikan semua pembuatan indeks sebelum memulai resharding, atau hindari membuat indeks saat resharding sedang berlangsung.

Selama tahap catch-up oplog inkremental, shard sumber hanya memblokir penulisan ke koleksi ketika perkiraan waktu tersisa berada dalam rentang dua detik, lalu menunggu shard tujuan menyelesaikan catch-up. Jika kasus penggunaan Anda dapat mentoleransi jendela pemblokiran yang lebih lama — misalnya, selama jendela pemeliharaan — jalankan perintah commitReshardCollection untuk segera memblokir penulisan dan mempercepat penyelesaian resharding.

Untuk informasi lebih lanjut, lihat Proses resharding dan Shard a collection.

Sharding

Selain peningkatan resharding di atas, MongoDB 8.0 mencakup perubahan sharding berikut:

  • Default hashed sharding: Hashed sharding membuat 1 chunk per shard secara default (turun dari 2 chunk sebelum MongoDB 8.0).

  • `dbHash` pada shard: Perintah dbHash kini dapat dijalankan pada shard individual.

  • Kunci shard parsial dalam kueri: findAndModify dan deleteOne menerima kunci shard parsial sebagai predikat kueri.

  • `updateOne` dengan upsert: Saat menggunakan updateOne dengan upsert: true pada koleksi sharded, semua bidang kunci shard dapat dihilangkan dari predikat kueri.

  • `unshardCollection`: Menghapus sharding dari koleksi yang sudah ada dan memindahkan semua dokumen ke shard tertentu, atau ke shard dengan data paling sedikit.

  • `moveCollection`: Memindahkan koleksi yang tidak di-shard ke shard tertentu, terlepas dari shard utama. Koleksi time series dan koleksi Queryable Encryption tidak dapat dipindahkan. Operasi penulisan diblokir selama sekitar 2 detik selama proses pemindahan.

Perintah dan fungsi pembantu mongosh berikut kini tersedia:

Commandmongosh helperDescription
moveCollectionsh.moveCollection()Memindahkan koleksi yang tidak di-shard ke shard tertentu.
unshardCollectionsh.unshardCollection()Menghapus sharding dari koleksi dan memindahkan semua data ke shard tertentu.
abortMoveCollectionsh.abortMoveCollection()Membatalkan operasi moveCollection yang sedang berlangsung.
abortUnshardCollectionsh.abortUnshardCollection()Membatalkan operasi unshardCollection yang sedang berlangsung.
Nonesh.shardAndDistributeCollection()Melakukan sharding pada koleksi dan segera mendistribusikan ulang data dengan kunci shard yang sudah ada. Setara dengan menjalankan shardCollection diikuti oleh reshardCollection.

Pencatatan log

Bidang workingMillis ditambahkan ke log kueri lambat. Bidang ini menunjukkan waktu yang sebenarnya dihabiskan MongoDB untuk memproses operasi, yang berguna untuk mengidentifikasi hambatan performa sebenarnya.

Berbeda dengan durationMillis — yang mencerminkan latensi operasi total termasuk waktu tunggu lock atau throttling traffic — workingMillis tidak mencakup waktu tunggu eksternal tersebut. Gunakan workingMillis ketika Anda ingin mengukur waktu pemrosesan aktual secara independen dari antrian atau kontensi lock.

Agregasi

Konversi BinData

Operator $convert kini mendukung konversi berikut:

  • String ke BinData

  • BinData ke string

Ekspresi $toUUID menyediakan cara singkat untuk mengonversi nilai string ke UUID.

$queryStats

Tahap agregasi $queryStats mengembalikan statistik untuk kueri yang terekam. Di MongoDB 8.0, tahap ini juga melacak dan melaporkan metrik pada change stream secara lebih efisien.

Keamanan database

Queryable Encryption: kueri rentang

Queryable Encryption kini mendukung kueri rentang pada bidang terenkripsi menggunakan $lt, $lte, $gt, dan $gte.

Antrian masuk

MongoDB 8.0 memperkenalkan antrian masuk (ingressAdmissionControllerTicketPoolSize) untuk permintaan jaringan masuk. Operasi yang diterima dari jaringan memasuki antrian ini sebelum diterima oleh database.

Antrian ini tidak terbatas secara default. Tetapkan ukuran maksimum antrian untuk membatasi jumlah permintaan dalam antrian dan mencegah antrian tak terbatas selama lonjakan traffic.

Optimasi lainnya

Bentuk kueri dan pengaturan kueri

MongoDB 8.0 memperkenalkan konsep Query Shape baru. Bentuk kueri sebelumnya kini disebut plan cache query shape. Gunakan pengaturan kueri (bukan filter indeks) untuk memengaruhi pemilihan rencana kueri — planCacheSetFilter untuk mengatur filter indeks tidak lagi didukung di MongoDB 8.0.

Tiga perintah mengelola pengaturan kueri:

  • setQuerySettings: Tentukan petunjuk indeks atau atur kebijakan reject untuk Query Shape tertentu guna memblokir eksekusinya.

  • removeQuerySettings: Hapus pengaturan kueri untuk Query Shape.

  • $querySettings: Lihat pengaturan kueri saat ini.

Waktu optimasi rencana kueri

Output explain() kini mencakup queryPlanner.optimizationTimeMillis, yang melaporkan waktu yang dihabiskan untuk optimasi rencana kueri dalam milidetik.

Timeout operasi baca default

Parameter baru defaultMaxTimeMS menetapkan batas waktu default (dalam milidetik) untuk operasi baca. Parameter ini berlaku untuk find, aggregate (kecuali tahap $merge dan $out), count, distinct, dan dbHash. Jika klien menentukan maxTimeMS pada operasi individual, nilai tersebut akan didahulukan.

Perintah bulkWrite

Perintah baru bulkWrite menjalankan beberapa operasi insert, update, dan delete di beberapa koleksi dalam satu permintaan.

Perubahan tambahan

  • Pengurutan `updateOne`: updateOne kini mendukung opsi sort.

  • Indeks TTL pada koleksi capped: Indeks TTL kini dapat dibuat pada koleksi capped.

  • Pemaketan oplog bulk insert: Insert bulk non-transaksional kini ditulis sebagai satu entri oplog alih-alih entri terpisah. Semua dokumen yang dimasukkan berbagi clusterTime yang sama dalam event change stream. Hal ini meningkatkan performa bulk insert dan mengurangi replikasi lag akibat replay beberapa oplog pada node secondary.

  • Operasi DDL konkuren: Koleksi berbeda dalam database yang sama kini dapat menjalani operasi DDL secara simultan.

  • Perubahan keanggotaan shard selama DDL: Menambah atau menghapus shard dari kluster sharded diblokir selama operasi DDL (seperti reshardCollection) sedang berlangsung. Selesaikan operasi DDL sebelum memodifikasi keanggotaan shard.

Perbaikan pembuatan indeks

MongoDB 8.0 meningkatkan pelaporan error dan ketahanan untuk pembuatan indeks:

AspekMongoDB 8.0Sebelum MongoDB 8.0
Pelaporan errorError yang terdeteksi selama fase pemindaian koleksi (kecuali error kunci duplikat) dikembalikan segera, dan pembuatan indeks dihentikan.Error yang terdeteksi selama pemindaian koleksi hanya dikembalikan pada fase commit di akhir pembuatan indeks, sehingga memperpanjang waktu diagnosis.
Secondary Node ResiliencePada error pembuatan indeks, node secondary dapat meminta primary untuk menghentikan pembuatan indeks dan tidak crash. (Jika secondary telah memberikan suara untuk commit, ia tidak dapat berhenti dan akan crash — konsisten dengan perilaku MongoDB 7.0.)Error pembuatan indeks dapat menyebabkan node secondary crash.
Manajemen Ruang DiskJika ruang disk yang tersedia turun di bawah indexBuildMinAvailableDiskSpaceMB, pembuatan indeks dihentikan secara otomatis. (Tidak dihentikan jika anggota telah memberikan suara untuk commit.)Pembuatan indeks juga dihentikan karena ruang disk tidak mencukupi.