MongoDB 4.4 mencapai akhir masa pakai (End of Life/EOL) pada Februari 2024. Melanjutkan penggunaan versi EOL berarti Anda tidak lagi menerima patch keamanan, perbaikan bug, atau dukungan. Lebih penting lagi, tim ApsaraDB for MongoDB telah mendokumentasikan bug kernel spesifik dan risiko operasional pada versi 4.4 dan sebelumnya — beberapa di antaranya berkategori Keparahan Tinggi — yang hanya dapat diselesaikan dengan melakukan upgrade.
Lakukan upgrade ke MongoDB 5.0, 6.0, 7.0, atau 8.0. Untuk tanggal siklus hidup versi, lihat Jadwal Siklus Hidup.
Risiko pada versi sebelumnya
Tim ApsaraDB for MongoDB mengidentifikasi risiko berikut berdasarkan pengalaman operasional database cloud jangka panjang.
Dokumen yatim menyebabkan inkonsistensi data selama migrasi
Versi yang terdampak: Instans kluster sharded yang menjalankan MongoDB 4.2 atau lebih baru
Versi perbaikan: MongoDB 4.4 atau lebih baru
Setelah sebuah chunk dimigrasikan dari shard sumber ke shard tujuan, shard sumber menyimpan chunk tersebut sementara sebelum dihapus. Gangguan migrasi meninggalkan dokumen yatim. Dokumen yatim tidak memengaruhi permintaan pada node mongos karena permintaan diperiksa oleh data routing dari node ConfigServer. Namun, dokumen yatim menumpuk dan menyebabkan inkonsistensi data selama migrasi berikutnya.
MongoDB 4.4 memperkenalkan migrasi chunk self-recovery dan pembersihan otomatis dokumen yatim. Jika node gagal di tengah migrasi, MongoDB secara otomatis melanjutkan proses tersebut — tidak perlu menjalankan cleanupOrphaned secara manual. Jalankan perintah tersebut hanya untuk memastikan bahwa thread pembersihan latar belakang aktif.
Untuk detailnya, lihat cleanupOrphaned.
Perintah compact memblokir operasi baca dan tulis
Versi yang terdampak: Semua arsitektur yang menjalankan MongoDB 4.2 atau lebih lama
Versi perbaikan: MongoDB 4.4 atau versi yang lebih baru
Menjalankan compact untuk melakukan defragmentasi disk pada MongoDB 4.2 atau lebih lama memblokir semua operasi baca dan tulis selama durasi eksekusi. Operasi ini tidak dapat diinterupsi, sehingga satu-satunya opsi pemulihan adalah me-restart instans, yang berdampak pada kelangsungan bisnis.
MongoDB 4.4 mengoptimalkan perilaku locking dari compact sehingga operasi CRUD tidak diblokir. Hanya beberapa operasi DDL — createIndex dan dropIndex — yang terpengaruh secara singkat. Jadwalkan eksekusi compact di luar jendela pemeliharaan Anda.
Untuk melakukan defragmentasi disk, kami merekomendasikan agar Anda menggunakan fitur analisis penyimpanan yang disediakan oleh ApsaraDB for MongoDB.
Untuk detailnya, lihat Defragmentasi disk instans dan pemblokiran compact.
Perintah compact menyebabkan node memasuki status RECOVERING
Versi yang terdampak: Semua arsitektur dengan versi utama MongoDB 4.2 atau lebih lama dan versi minor sebelum 4.2.18
Versi perbaikan: MongoDB 4.4 atau lebih baru
Pada versi yang terdampak, menjalankan compact menyebabkan node mongos memasuki status RECOVERING. Jika node tetap dalam status ini cukup lama, komponen aktivasi ApsaraDB for MongoDB menganggapnya tidak sehat dan memicu rebuild, menyebabkan downtime tak terencana.
Mulai dari MongoDB 4.2.18, node mongos tidak lagi memasuki status RECOVERING setelah menjalankan compact, sehingga mencegah ketidaktersediaan node dan alur rebuild yang tidak diharapkan.
Untuk melakukan defragmentasi disk, kami merekomendasikan agar Anda menggunakan fitur analisis penyimpanan yang disediakan oleh ApsaraDB for MongoDB.
Untuk detailnya, lihat Defragmentasi disk instans dan RECOVERING pada compact.
Cadangan fisik pada node tersembunyi mengonsumsi ruang disk berlebihan
Versi yang terdampak: Semua arsitektur yang menjalankan MongoDB 4.2 atau lebih lama yang menggunakan disk lokal
Versi perbaikan: MongoDB 5.0 atau versi yang lebih baru (disk cloud)
Mekanisme cadangan fisik pada instans berbasis disk lokal menyebabkan ukuran file disk terus bertambah selama unggah cadangan. File besar yang terakumulasi mengonsumsi ruang disk signifikan dan memicu peringatan penggunaan disk yang salah selama kegagalan node atau alih bencana.
Instans berbasis disk cloud menggabungkan cadangan fisik dengan snapshot disk, mengurangi waktu yang diperlukan untuk mempertahankan checkpoint cadangan WiredTiger (WT) dan menyelesaikan pembengkakan ruang disk pada node tersembunyi. Untuk instans set replika dengan data lebih dari 2 TB, gunakan cadangan snapshot untuk menghindari waktu pencadangan yang lama, tingkat kegagalan tinggi, dan konflik operasi O&M yang terjadi pada pencadangan fisik berbasis disk lokal.
Data routing sisa merusak database yang dibuat ulang dengan nama yang sama
Versi yang terdampak: Instans kluster sharded yang menjalankan MongoDB 4.4 atau lebih lama
Versi perbaikan: MongoDB 5.0 atau lebih baru
Saat Anda menghapus database dengan dropDatabase di kluster sharded lalu membuat ulang database dengan nama yang sama, data routing sisa di node ConfigServer menyebabkan operasi baca dan tulis gagal.
Pada MongoDB 4.2 atau lebih lama, Anda harus menjalankan dropDatabase berulang kali lalu menjalankan flushRouterConfig pada semua node mongos untuk membersihkan data routing — jika tidak, data sisa akan menurunkan performa.
MongoDB 5.0 mengoptimalkan penanganan data routing dropDatabase sehingga data routing secara otomatis dibersihkan, menghilangkan kebutuhan pembersihan manual ini.
Untuk detailnya, lihat dropDatabase dan flushRouterConfig.
Kepedulian tulis default {w:1} menyebabkan kegagalan sinkronisasi data pada node secondary
Versi yang terdampak: Semua arsitektur yang menjalankan versi sebelum MongoDB 5.0
Versi perbaikan: MongoDB 5.0 atau versi yang lebih baru
Dengan kepedulian tulis default {w:1}, data yang ditulis cepat ke node primary mungkin hanya sebagian yang sampai ke node secondary, menyebabkan node tersebut memasuki status RECOVERING. Hal ini menurunkan ketersediaan instans, mengganggu workload pemisahan baca/tulis, dan mencegah cadangan inkremental serta pemulihan pada titik waktu.
MongoDB 5.0 mengubah kepedulian tulis default dari {w:1} menjadi {w:"majority"}. Data hanya dapat di-query setelah mayoritas anggota set replika mengonfirmasi tulisan tersebut, meningkatkan keandalan data dengan sedikit penurunan performa. Untuk skenario throughput tulis tinggi di mana Anda dapat menerima perilaku sebelumnya, atur kembali kepedulian tulis ke {w:1}.
Untuk informasi selengkapnya, lihat Default Write Concern dan setDefaultRWConcern.
Balancer melakukan rebalance data terlalu lambat untuk mendukung scale-out
Versi yang terdampak: Semua arsitektur yang menjalankan versi sebelum MongoDB 5.0
Versi perbaikan: MongoDB 5.0 atau lebih baru
Balancer tidak dapat memigrasikan chunk cukup cepat untuk melakukan rebalance data selama kejadian scale-out, yang menurunkan performa karena data tetap terdistribusi tidak merata di seluruh shard.
MongoDB 5.0 menambahkan parameter chunkMigrationConcurrency dan balancerMigrationsThrottlingMs sehingga Anda dapat menyesuaikan konkurensi dan throughput migrasi balancer sesuai workload Anda.
Jika instans Anda sudah menggunakan MongoDB 5.0 tetapi parameter ini tidak tersedia, lakukan update ke versi minor yang lebih baru. Lihat Update versi minor instans.
Untuk detailnya, lihat chunkMigrationConcurrency dan balancerMigrationsThrottlingMs.
Pemimbangan berbasis jumlah chunk menyebabkan ketidakseimbangan beban di kluster sharded
Versi yang terdampak: Semua arsitektur dengan versi utama MongoDB 5.0 atau lebih lama dan versi minor sebelum 6.0.3
Versi perbaikan: MongoDB 6.0 atau lebih baru
Balancer mendistribusikan data berdasarkan jumlah chunk, bukan volume data. Ketika chunk jumbo atau chunk kosong ada — atau ketika subset data menerima trafik yang jauh lebih tinggi — chunk tampak seimbang berdasarkan jumlah, tetapi shard membawa beban yang tidak seimbang.
MongoDB 6.0.3 mengubah balancer untuk mendistribusikan data berdasarkan perbedaan volume data di seluruh shard, bukan jumlah chunk. Hal ini menyelesaikan ketidakseimbangan beban yang disebabkan oleh chunk jumbo, chunk kosong, dan pola data panas.
Untuk detailnya, lihat Perubahan pada balancer di MongoDB 6.0.3.
Masalah kernel lainnya
Tabel berikut mencantumkan masalah kernel tambahan pada versi MongoDB sebelumnya yang diidentifikasi oleh tim ApsaraDB for MongoDB.
| Versi | Masalah | Tingkat risiko | Pemicu dan deskripsi |
|---|---|---|---|
| MongoDB 3.4 | SERVER-34192 SERVER-20328 SERVER-21307 | Sedang | Pemicu: Pemisahan baca/tulis diaktifkan. Masalah: Lock global diambil saat node secondary mereplay oplog, menyebabkan permintaan lambat. |
| MongoDB 4.0 | SERVER-70783 | Rendah | Pemicu: Jumlah koneksi server meningkat signifikan. Masalah: Assertion dipicu oleh sesi yang tidak mencukupi, menyebabkan kegagalan node mongos dan alih bencana. |
| MongoDB 3.6–4.2 | SERVER-40535 | Rendah | Pemicu: Kadang-kadang. Masalah: Error Cache Reader No keys found for HMAC that is valid for time; diperlukan logika retry. |
| MongoDB 4.2 atau lebih lama | SERVER-43641 SERVER-51803 | Rendah | Pemicu: Kadang-kadang; terkait dengan /dev/urandom. Masalah: Node mongos crash dan pulih otomatis setelah restart. |
| MongoDB 4.0–4.2 | SERVER-43889 | Rendah | Pemicu: Kadang-kadang. Masalah: Server tidak dapat membedakan transaksi dari tulisan yang dapat diulang, menyebabkan kegagalan permintaan. |
| MongoDB 4.0–4.4 | SERVER-51281 SERVER-50365 | Tinggi | Pemicu: Transaksi berjalan lama. Masalah: Cache tulis tembus gagal melakukan evict, baris cache kotor melebihi 20%, dan thread pembersihan transaksi macet — menyebabkan peningkatan latensi permintaan signifikan dan penurunan performa. |
| MongoDB 3.6–4.4 | SERVER-52654 | Tinggi | Pemicu: Node ConfigServer belum melakukan switch dalam 90 hari. Masalah: Kegagalan pembuatan kunci Hash-based Message Authentication Code (HMAC) pada node ConfigServer menyebabkan node mongos crash dan gagal pulih otomatis. |
| MongoDB 4.0–4.4 | SERVER-53566 | Sedang | Pemicu: Kadang-kadang. Masalah: Error assertion opContext menyebabkan mongod crash dan memicu alih bencana. |
| MongoDB 4.4 atau lebih lama | SERVER-21307 | Tinggi | Pemicu: Operasi DDL dicatat dalam oplog selama pembuatan indeks latar belakang pada node secondary. Masalah: Operasi DDL diblokir dan node secondary gagal. |
| MongoDB 4.4 atau lebih lama | WT-5809 | Sedang | Pemicu: Restart node atau inisialisasi sinkronisasi data. Masalah: Masalah pengurutan temporal di history store WiredTiger memicu error assertion WT, menyebabkan mongod crash. |
| MongoDB 4.2–4.4 | SERVER-51041 | Tinggi | Pemicu: Pemisahan baca/tulis diaktifkan dan beban node secondary tinggi. Masalah: Kontensi mutex thread POSIX menghabiskan tiket baca pada node secondary, menurunkan performa. |
| MongoDB 4.2–4.4 | SERVER-52556 SERVER-66176 | Sedang | Pemicu: Aplikasi sering memanggil listCollections. Masalah: Kontensi lock mutex pada komponen CollectionCatalog dasar menurunkan performa secara signifikan. |
| MongoDB 6.0 atau lebih lama | SERVER-63865 SERVER-67038 SERVER-69877 | Tinggi | Pemicu: Error kehabisan memori (OOM) selama pembuatan indeks. Masalah: Mongod berulang kali restart dan gagal pulih. Jika dua node set replika memasuki kondisi ini, instans menjadi tidak tersedia. |
| MongoDB 6.0 atau lebih lama | SERVER-56194 | Rendah | Pemicu: Sejumlah besar dokumen kedaluwarsa setelah membuat indeks Time to Live (TTL) atau memodifikasi waktu kedaluwarsa. Masalah: Thread TTL backend macet dan gagal pulih, menyebabkan fitur TTL berhenti berfungsi. |
Fitur baru pada versi yang lebih baru
| Versi | Fitur | Deskripsi |
|---|---|---|
| MongoDB 5.0 | Koleksi deret waktu | Penyimpanan dan kueri efisien untuk data deret waktu dalam skenario Internet of Vehicles (IoV) dan Internet of Things (IoT). |
| Kueri snapshot berjalan lama | Membaca snapshot historis tanpa memengaruhi operasi yang sedang berjalan. | |
| Versioned API | Memisahkan siklus hidup aplikasi dari siklus hidup database. Aplikasi tetap sepenuhnya kompatibel meskipun terjadi peningkatan versi database — tidak diperlukan remediasi kompatibilitas. | |
| MongoDB 6.0 | Aliran perubahan | Tampilan sebelum perubahan kini tersedia. Efisiensi eksekusi dan pemanfaatan resource ditingkatkan. Pembaruan dokumen yatim dapat difilter. Lebih banyak event perubahan DDL didukung, meningkatkan dukungan Change Data Capture (CDC). |
| Kueri JOIN di kluster sharded | Instans kluster sharded mendukung operator $lookup dan $graphLookup untuk kueri JOIN, dengan peningkatan performa operator. | |
| Defragmentasi otomatis di kluster sharded | Gunakan configureCollectionBalancing untuk menentukan ukuran chunk per shard dan mengaktifkan defragmentasi otomatis — tidak perlu menjalankan compact secara manual di kluster sharded. | |
| Penyempurnaan koleksi deret waktu | Dukungan sharding, kompresi kolom untuk mengurangi penggunaan penyimpanan, indeks secondary dan gabungan untuk performa baca, indeks geospasial untuk data spatio-temporal, serta pengurutan deret waktu yang dioptimalkan. | |
| Perintah `compact` yang disempurnakan | compact di WiredTiger sepenuhnya dioptimalkan dengan performa yang jauh lebih baik dan lebih sedikit kegagalan akibat evict. | |
| MongoDB 7.0 | Analisis kunci shard | Menganalisis hasil kueri sampel untuk menilai apakah kunci shard koleksi optimal. Gunakan ini untuk mengonfigurasi skema dan kunci shard lebih efisien. |
| Enkripsi yang dapat di-query | Mengenkripsi data sensitif sepanjang siklus hidupnya — dalam transit, saat diam, saat digunakan, dalam log, dan dalam cadangan. Data hanya didekripsi di sisi klien, secara signifikan mengurangi risiko kebocoran data akibat pencurian. | |
| Pemeriksaan konsistensi metadata | Secara otomatis mendeteksi inkonsistensi metadata dan indeks setelah jendela pemeliharaan berakhir atau setelah pengecualian seperti error OOM atau failover. | |
| Event perubahan besar di aliran perubahan | Operator $changeStreamSplitLargeEvent membagi event perubahan yang lebih besar dari 16 MB, menyelesaikan keterbatasan pada versi sebelumnya di mana event besar menyebabkan kegagalan aliran perubahan. | |
| Pembatasan kecepatan dinamis di WiredTiger | Menyesuaikan secara dinamis konkurensi transaksi WiredTiger (default: 128) untuk mencegah kegagalan database akibat akumulasi permintaan setelah pengecualian. | |
| MongoDB 8.0 | Advanced TCMalloc | Menggunakan cache per-CPU alih-alih cache per-thread untuk mengurangi fragmentasi memori dan menangani workload lebih berat. Thread latar belakang melepaskan memori ke sistem operasi setiap detik. |
| Performa replikasi yang dioptimalkan | Dengan kepedulian tulis diatur ke majority, MongoDB memberikan respons setelah oplog ditulis ke sebagian besar anggota replika, bukan menunggu perubahan diterapkan — meningkatkan throughput tulis. Node secondary juga menulis dan menerapkan batch oplog secara paralel: thread Writer membaca dari primary dan menulis ke oplog lokal, sementara thread Applier menerapkan perubahan ke database lokal secara asinkron. | |
| Resharding yang dioptimalkan | Performa reshardCollection ditingkatkan untuk mengubah kunci shard dan distribusi data koleksi. |