全部产品
Search
文档中心

ApsaraDB for MongoDB:Mengapa saya perlu memutakhirkan instans saya ke versi MongoDB yang lebih baru?

更新时间:Jul 02, 2025

Seiring dengan berkembangnya komunitas MongoDB, MongoDB memberikan lebih banyak manfaat seperti peningkatan performa, keamanan yang dioptimalkan, dan berbagai fitur tambahan di versi-versi terbaru. Komunitas MongoDB juga secara bertahap menghentikan dukungan dan pemeliharaan untuk versi MongoDB sebelumnya. Jika Anda terus menggunakan versi MongoDB sebelumnya, Anda mungkin menghadapi berbagai masalah serta risiko keamanan dan stabilitas.

MongoDB 4.4 memasuki status Akhir Masa Pakai (EOL) pada Februari 2024 sesuai jadwal siklus hidup perangkat lunak MongoDB. Untuk mendapatkan layanan yang optimal, kami merekomendasikan agar Anda memutakhirkan instans Anda ke versi yang lebih baru, seperti MongoDB 5.0, MongoDB 6.0, MongoDB 7.0, atau MongoDB 8.0. Untuk informasi lebih lanjut, lihat Jadwal Siklus Hidup.

Risiko pada versi sebelumnya

Tim ApsaraDB for MongoDB merangkum risiko pada versi sebelumnya berdasarkan pengalaman operasi dan pemeliharaan database cloud jangka panjang. Bagian ini menjelaskan risiko tersebut dan versi yang direkomendasikan untuk menyelesaikannya.

Ketidaksesuaian data terjadi selama migrasi data karena adanya dokumen yatim di instans kluster sharded

  • Versi dan arsitektur yang terpengaruh: Instans kluster sharded yang menjalankan MongoDB 4.2 atau lebih baru.

  • Deskripsi: Jika dokumen yatim tidak dibersihkan di instans kluster sharded, ketidaksesuaian data dapat terjadi selama migrasi.

  • Versi yang direkomendasikan: MongoDB 4.4 atau lebih baru.

  • Alasan rekomendasi:

    Setelah sebuah chunk dimigrasikan dari shard sumber ke shard baru, chunk di shard sumber dipertahankan selama periode tertentu sebelum dihapus. Dalam banyak kasus, dokumen yatim dihasilkan akibat interupsi migrasi. Dokumen yatim tidak memengaruhi permintaan pada node mongos karena permintaan tersebut diverifikasi oleh data routing node ConfigServer.

    MongoDB 4.4 atau lebih baru mendukung pemulihan otomatis migrasi chunk dan pembersihan dokumen yatim secara otomatis. Jika node gagal, MongoDB secara otomatis memulihkan proses migrasi yang terganggu. Anda tidak perlu menjalankan perintah cleanupOrphaned untuk membersihkan dokumen yatim. Namun, Anda dapat menjalankan perintah ini untuk memastikan apakah thread backend sedang membersihkan dokumen yatim di instans.

    Untuk informasi lebih lanjut, lihat cleanupOrphaned.

Operasi compact memblokir permintaan baca dan tulis

  • Versi dan arsitektur yang terpengaruh: Instans dari semua arsitektur yang menjalankan MongoDB 4.2 atau lebih lama.

  • Deskripsi: Operasi compact untuk mendefragmentasi disk memblokir permintaan baca dan tulis di versi sebelumnya. Dalam hal ini, Anda harus me-restart instans karena operasi tidak dapat diinterupsi, yang dapat memengaruhi bisnis Anda.

  • Versi yang direkomendasikan: MongoDB 4.4 atau lebih baru.

  • Alasan rekomendasi:

    Mulai dari MongoDB 4.4, perilaku penguncian perintah compact dioptimalkan sehingga operasi baca dan tulis (CRUD) tidak diblokir, kecuali beberapa operasi DDL seperti createIndex dan dropIndex. Anda dapat menjalankan perintah compact di luar jendela pemeliharaan yang ditentukan.

    Untuk informasi lebih lanjut, lihat Defragmentasi disk instans untuk meningkatkan utilisasi disk dan compact Blocking.

    Catatan

    Untuk mendefragmentasi disk, kami merekomendasikan penggunaan fitur analisis penyimpanan yang disediakan oleh ApsaraDB for MongoDB. Untuk informasi lebih lanjut tentang fitur ini, lihat Analisis Penyimpanan.

Operasi compact menyebabkan node memasuki status RECOVERING

  • Versi dan arsitektur yang terpengaruh: Instans dari semua arsitektur dengan versi utama MongoDB 4.2 atau lebih lama dan versi minor lebih lama dari MongoDB 4.2.18.

  • Deskripsi: Node di instans yang menjalankan versi sebelumnya memasuki status RECOVERING setelah operasi compact dilakukan. Jika node tetap dalam status tersebut untuk waktu yang lama, komponen aktivasi instans ApsaraDB for MongoDB akan menganggap node tidak sehat dan memicu operasi pembangunan ulang.

  • Versi yang direkomendasikan: MongoDB 4.4 atau lebih baru.

  • Alasan rekomendasi:

    Mulai dari MongoDB 4.2.18, node mongos tidak memasuki status RECOVERING setelah menjalankan perintah compact. Ini mencegah adanya node mongos yang tidak tersedia dan aliran tugas pembangunan ulang yang tidak diharapkan.

    Untuk informasi lebih lanjut, lihat Defragmentasi disk instans untuk meningkatkan utilisasi disk dan compact RECOVERING.

    Catatan

    Untuk mendefragmentasi disk, kami merekomendasikan penggunaan fitur analisis penyimpanan yang disediakan oleh ApsaraDB for MongoDB. Untuk informasi lebih lanjut tentang fitur ini, lihat Analisis Penyimpanan.

Cadangan fisik di node tersembunyi mengonsumsi sejumlah besar ruang disk

  • Versi dan arsitektur yang terpengaruh: Instans dari semua arsitektur yang menjalankan MongoDB 4.2 atau lebih lama dan menggunakan disk lokal.

  • Deskripsi: Ukuran file disk terus meningkat selama unggahan cadangan karena mekanisme cadangan fisik. Jika sejumlah besar file disk terakumulasi, ruang disk yang signifikan dikonsumsi. Jika terjadi kegagalan node atau switchover, peringatan salah terkait penggunaan disk dapat dipicu.

  • Versi yang direkomendasikan: MongoDB 5.0 atau lebih baru (disk cloud).

  • Alasan rekomendasi:

    Cadangan penuh di instans yang menggunakan disk cloud menggabungkan cadangan fisik dengan snapshot disk. Pendekatan ini mengurangi waktu yang diperlukan untuk memelihara titik kontrol cadangan di WiredTiger (WT) dan menyelesaikan pembengkakan ruang disk akibat cadangan pada node tersembunyi di kluster sharded secara efisien.

    Snapshot cadangan dan pemulihan data berdasarkan snapshot cadangan yang disediakan oleh instans yang menggunakan disk cloud memberikan kinerja yang lebih baik. Jika jumlah data dalam instans set replika melebihi 2 TB, kami merekomendasikan penggunaan snapshot cadangan untuk mencadangkan data. Dengan cara ini, masalah seperti waktu pencadangan fisik yang lama untuk instans yang menggunakan disk lokal, tingkat kegagalan pencadangan yang tinggi, dan kegagalan untuk melakukan operasi O&M lainnya dapat dihindari.

Data routing ada di instans kluster sharded saat Anda membuat ulang database yang memiliki nama sama dengan database yang telah dihapus

  • Versi dan arsitektur yang terpengaruh: Instans kluster sharded yang menjalankan MongoDB 4.4 atau lebih lama.

  • Deskripsi: Saat menjalankan perintah dropDatabase di instans kluster sharded dan kemudian membuat ulang database dengan nama yang sama, operasi baca dan tulis tidak dapat dilakukan seperti yang diharapkan karena data routing masih ada di node ConfigServer instans.

  • Versi yang direkomendasikan: MongoDB 5.0 atau lebih baru.

  • Alasan rekomendasi:

    MongoDB 5.0 atau lebih baru mengoptimalkan pemrosesan data routing perintah dropDatabase. Dengan demikian, data routing tidak ada di instans kluster sharded yang menjalankan MongoDB 5.0 atau lebih baru. Di MongoDB 4.2 atau lebih lama, Anda harus menjalankan perintah dropDatabase berulang kali dan menjalankan perintah flushRouterConfig di semua node mongos untuk menyegarkan data routing. Jika tidak, data routing residu dapat menurunkan kinerja database.

    Untuk informasi lebih lanjut, lihat dropDatabase dan flushRouterConfig.

Sinkronisasi data antara node primer dan sekunder abnormal karena pengaturan writeConcern default {w:1}

  • Versi dan arsitektur yang terpengaruh: Instans dari semua arsitektur yang menjalankan versi lebih lama dari MongoDB 5.0.

  • Deskripsi: Jika data dengan cepat ditulis ke node primer instans, node sekunder mungkin hanya menerima sebagian data dan kemudian memasuki status RECOVERING. Ini menurunkan ketersediaan instans. Node sekunder mungkin gagal membaca data yang diharapkan, yang merugikan bisnis yang memerlukan pembagian baca/tulis. Dalam hal ini, pencadangan inkremental tidak dapat dilakukan seperti yang diharapkan, dan data tidak dapat dipulihkan ke titik waktu sebelumnya.

  • Versi yang direkomendasikan: MongoDB 5.0 atau lebih baru.

  • Alasan rekomendasi:

    Mulai dari MongoDB 5.0, nilai default writeConcern diubah dari {w:1} menjadi {w:"majority"}. Ini berarti data yang akan ditulis hanya dapat di-query setelah data dikonfirmasi oleh sebagian besar node di instans set replika. Hal ini meningkatkan keandalan data dengan sedikit penurunan performa dan menyelesaikan kehilangan data yang disebabkan oleh respons query lambat atau node primer dalam status ROLLBACK karena sebagian data diterima oleh node sekunder dan kontrol aliran yang dipicu pada node primer.

    Anda dapat mengatur writeConcern ke {w:1} dalam skenario yang memerlukan performa tulis tinggi.

    Untuk informasi lebih lanjut, lihat Default Write Concern dan setDefaultRWConcern.

Balancer mendistribusikan data secara merata dengan kecepatan lambat, memberikan performa penskalaan yang buruk, dan gagal melakukan aktivitas penskalaan keluar selama jam sibuk

  • Versi dan arsitektur yang terpengaruh: Instans dari semua arsitektur yang menjalankan versi lebih lama dari MongoDB 5.0.

  • Deskripsi: Balancer tidak dapat memigrasikan data dengan kecepatan lebih tinggi. Akibatnya, data tidak dapat didistribusikan secara merata dengan cepat dalam skenario yang memerlukan aktivitas penskalaan keluar, menurunkan kinerja database.

  • Versi yang direkomendasikan: MongoDB 5.0 atau lebih baru.

  • Alasan rekomendasi:

    Mulai dari MongoDB 5.0, parameter chunkMigrationConcurrency dan balancerMigrationsThrottlingMs ditambahkan untuk menyesuaikan konkurensi migrasi dan performa balancer.

    Untuk informasi lebih lanjut, lihat chunkMigrationConcurrency dan balancerMigrationsThrottlingMs.

    Catatan

    Jika instans Anda menjalankan MongoDB 5.0 dan tidak mendukung dua parameter tersebut, perbarui versi minor instans. Untuk informasi lebih lanjut, lihat Perbarui versi minor instans.

Beban di instans kluster sharded didistribusikan secara tidak merata karena ketidakseimbangan data

  • Versi dan arsitektur yang terpengaruh: Instans dari semua arsitektur dengan versi utama MongoDB 5.0 atau lebih lama dan versi minor lebih lama dari MongoDB 6.0.3.

  • Deskripsi: Balancer memeriksa distribusi data berdasarkan jumlah chunk di antara shard. Jika terdapat chunk Jumbo dan kosong serta sebagian data sering diakses, ketidakseimbangan data dan beban dapat terjadi di antara shard.

  • Versi yang direkomendasikan: MongoDB 6.0 atau lebih baru.

  • Alasan rekomendasi:

    Mulai dari MongoDB 6.0.3, balancer mendistribusikan data secara merata berdasarkan perbedaan volume data di antara shard, bukan perbedaan jumlah chunk. Hal ini menyelesaikan ketidakseimbangan data dan beban akibat adanya chunk Jumbo dan kosong serta data yang sering diakses di versi sebelumnya.

    Untuk informasi lebih lanjut, lihat Perubahan pada balancer di MongoDB 6.0.3.

Masalah kernel lainnya

Versi

Masalah kernel

Tingkat risiko

Deskripsi

MongoDB 3.4

SERVER-34192

SERVER-20328

SERVER-21307

Sedang

[Penyebab]: Pembagian baca/tulis diaktifkan untuk instans Anda.

[Deskripsi masalah]: Kunci global ditambahkan saat node sekunder memainkan ulang oplog, yang menyebabkan permintaan lambat.

MongoDB

4.0

SERVER-70783

Rendah

[Penyebab]: Jumlah koneksi di server meningkat secara signifikan.

[Deskripsi masalah]: Aserksi mungkin dipicu karena sesi yang tidak mencukupi. Dalam hal ini, node mongos gagal dan switchover node dipicu.

MongoDB

3.6 hingga MongoDB 4.2

SERVER-40535

Rendah

[Penyebab]: Sesekali.

[Deskripsi masalah]: Anda menerima kesalahan Cache Reader No keys found for HMAC that is valid for time. Dalam hal ini, logika percobaan ulang diperlukan.

MongoDB

4.2 atau lebih lama

SERVER-43641

SERVER-51803

Rendah

[Penyebab]: Sesekali. Masalah ini terkait dengan /dev/urandom.

[Deskripsi masalah]: Node mongos crash. Node tersebut secara otomatis pulih dari kegagalan setelah node di-restart.

MongoDB

4.0 hingga MongoDB 4.2

SERVER-43889

Rendah

[Penyebab]: Sesekali.

[Deskripsi masalah]: Server tidak dapat membedakan transaksi dengan benar dari penulisan yang dapat dicoba ulang, yang menyebabkan permintaan gagal dan kesalahan.

MongoDB

4.0 hingga MongoDB 4.4

SERVER-51281

SERVER-50365

Tinggi

[Penyebab]: Transaksi jangka panjang.

[Deskripsi masalah]: Cache write-through gagal dievict seperti yang diharapkan, dan persentase baris cache kotor melebihi 20%. Thread yang membersihkan transaksi timeout mungkin macet, yang menyebabkan peningkatan latensi permintaan secara signifikan dan kinerja database menurun.

MongoDB

3.6 hingga MongoDB 4.4

SERVER-52654

Tinggi

[Kondisi pemicu]: Node ConfigServer tidak beralih selama 90 hari.

[Deskripsi masalah]: Masalah terkait pembuatan kunci Hash-based Message Authentication Code (HMAC) pada node ConfigServer menyebabkan node mongos crash dan gagal pulih secara otomatis dari kegagalan.

MongoDB

4.0 hingga MongoDB 4.4

SERVER-53566

Sedang

[Penyebab]: Sesekali.

[Deskripsi masalah]: Kesalahan asersi yang dipicu oleh opContext menyebabkan mongod crash dan switchover dipicu.

MongoDB

4.4 atau lebih lama

SERVER-21307

Tinggi

[Penyebab]: Operasi DDL direkam dalam oplog saat indeks sedang dibuat di node sekunder di backend.

[Deskripsi masalah]: Operasi DDL diblokir dan node sekunder gagal.

MongoDB

4.4 atau lebih lama

WT-5809

Sedang

[Penyebab]: Node di-restart atau sinkronisasi data diinisialisasi.

[Deskripsi masalah]: Dalam proses pemulihan node, masalah terkait menentukan urutan temporal history store di WT memicu kesalahan asersi WT, yang menyebabkan mongod crash.

MongoDB

4.2 hingga MongoDB 4.4

SERVER-51041

Tinggi

[Penyebab]: Pembagian baca/tulis diaktifkan untuk instans Anda, dan beban pada node sekunder tinggi.

[Deskripsi masalah]: Saat thread POSIX bersaing untuk kunci mutex, tiket baca pada node sekunder habis dan kinerja database menurun.

MongoDB

4.2 hingga MongoDB 4.4

SERVER-52556

SERVER-66176

Sedang

[Penyebab]: Aplikasi Anda sering memanggil operasi listCollections.

[Deskripsi masalah]: Masalah terkait kunci mutex dalam komponen CollectionCatalog yang mendasari secara signifikan menurunkan kinerja database.

MongoDB

6.0 atau lebih lama

SERVER-63865

SERVER-67038

SERVER-69877

Tinggi

[Penyebab]: Kesalahan kehabisan memori (OOM) terjadi di instans yang menjalankan versi sebelumnya saat indeks sedang dibuat untuk instans.

[Deskripsi masalah]: Mongod di-restart berulang kali dan gagal pulih secara otomatis dari kegagalan. Jika dua node dalam instans set replika memasuki status ini, instans menjadi tidak tersedia.

MongoDB

6.0 atau lebih lama

SERVER-56194

Rendah

[Penyebab]: Sejumlah besar dokumen kedaluwarsa dihasilkan setelah Anda membuat indeks Time to Live (TTL) atau memodifikasi waktu kedaluwarsa.

[Deskripsi masalah]: Thread TTL backend macet dan gagal pulih secara otomatis dari kegagalan. Ini menyebabkan fitur TTL tidak berfungsi.

Fitur baru dan optimasi di versi terbaru

Versi

Fitur baru atau optimasi

Deskripsi

MongoDB 5.0

Koleksi deret waktu

Mulai dari MongoDB 5.0, data deret waktu dapat diproses dengan cara yang lebih efektif dalam skenario seperti Internet of Vehicles (IoV) dan Internet of Things (IoT).

Kueri snapshot jangka panjang

Mulai dari MongoDB 5.0, snapshot historis dapat dibaca.

API Versi.

Mulai dari MongoDB 5.0, fitur API versi didukung. Fitur ini memisahkan siklus hidup aplikasi dari siklus hidup database dan memastikan kompatibilitas penuh. Anda tidak perlu menangani risiko kompatibilitas yang disebabkan oleh pemutakhiran versi database.

MongoDB 6.0

ChangeStream

Mulai dari MongoDB 6.0, ChangeStream dioptimalkan dalam aspek berikut:

  • Tampilan pra-perubahan ditampilkan.

  • Efisiensi eksekusi dan utilisasi sumber daya ditingkatkan.

  • Pembaruan dokumen yatim dapat difilter.

  • Lebih banyak peristiwa perubahan DDL dapat ditangani. Ini meningkatkan dukungan ApsaraDB for MongoDB untuk skenario Change Data Capture (CDC).

Kueri JOIN

Instans kluster sharded ApsaraDB for MongoDB yang menjalankan MongoDB 6.0 atau lebih baru mendukung operator $lookup dan $graphLookup untuk melakukan kueri JOIN dan meningkatkan performa operator terkait kueri JOIN.

Defragmentasi otomatis di instans kluster sharded

Instans kluster sharded ApsaraDB for MongoDB yang menjalankan MongoDB 6.0 atau lebih baru memungkinkan Anda menjalankan perintah configureCollectionBalancing untuk menentukan ukuran chunk yang berbeda untuk beberapa shard dan mendukung defragmentasi otomatis. Anda tidak perlu menjalankan perintah compact untuk mendefragmentasi disk instans kluster sharded.

Koleksi deret waktu

Mulai dari MongoDB 6.0, koleksi deret waktu dioptimalkan dalam aspek berikut:

  • Sharding didukung.

  • Kompresi kolom didukung untuk mengurangi penggunaan penyimpanan.

  • Indeks sekunder dan gabungan diperkenalkan untuk meningkatkan performa baca.

  • Indeks spasial diperkenalkan untuk data spatio-temporal.

  • Pengurutan data deret waktu dioptimalkan. Anda dapat menggunakan koleksi deret waktu dalam lebih banyak skenario deret waktu dan performa meningkat secara signifikan.

Perintah compact yang ditingkatkan

ApsaraDB for MongoDB sepenuhnya mengoptimalkan perintah compact di WT. Ini secara signifikan meningkatkan performa perintah dan mengurangi kegagalan yang disebabkan oleh proses eviction selama eksekusi perintah.

MongoDB 7.0

Analisis kunci shard

Mulai dari MongoDB 7.0, Anda dapat menentukan apakah kunci shard suatu koleksi masuk akal berdasarkan hasil kueri sampel. Dengan cara ini, Anda dapat mengonfigurasi skema dan kunci shard untuk instans Anda dan menggunakan arsitektur kluster sharded secara lebih efisien.

Enkripsi yang dapat di-query

Mulai dari MongoDB 7.0, enkripsi yang dapat di-query memastikan bahwa data sensitif dienkripsi sepanjang masa pakai data dan hanya didekripsi di klien. Masa pakai data mencakup fase berikut: transmisi, saat diam, saat digunakan, pencatatan, dan pencadangan. Fitur ini memastikan keamanan data yang lebih baik dan komprehensif serta secara efektif mengurangi risiko kebocoran data yang disebabkan oleh pencurian data.

Pemeriksaan konsistensi metadata

MongoDB 7.0 atau lebih baru dapat secara otomatis mendeteksi potensi risiko ketidaksesuaian metadata atau indeks setelah periode pemeliharaan database berakhir atau tidak terjadi pengecualian seperti kesalahan OOM atau failover.

Peristiwa perubahan besar yang ditangani oleh ChangeStream

Mulai dari MongoDB 7.0, operator $changeStreamSplitLargeEvent ditambahkan untuk memungkinkan Anda membagi peristiwa perubahan besar yang melebihi ukuran 16 MB. Ini menyelesaikan kegagalan ChangeStream dalam menangani peristiwa perubahan besar di versi sebelumnya.

Throttling dinamis di WT

MongoDB 7.0 atau lebih baru secara dinamis menyesuaikan konkurensi transaksi WT untuk menerapkan throttling. Secara default, konkurensi transaksi WT diatur ke 128. Ini menyelesaikan kegagalan database yang disebabkan oleh permintaan yang terakumulasi setelah pengecualian di versi sebelumnya.

MongoDB 8.0

TCMalloc Lanjutan

Mulai dari MongoDB 8.0, TCMalloc lanjutan digunakan.

  • TCMalloc lanjutan menggunakan cache setiap CPU daripada setiap thread untuk mengurangi fragmen memori dan memungkinkan database menjalankan beban kerja yang lebih berat.

  • TCMalloc lanjutan membuat thread backend yang mencoba melepaskan memori kembali ke sistem operasi setiap detik.

Optimasi performa replikasi

  • Mulai dari MongoDB 8.0, ketika writeConcern diatur ke majority, MongoDB mengembalikan oplog setelah mereka ditulis ke sebagian besar anggota set replika, bukan menunggu perubahan diterapkan sebelum mengembalikan. Ini meningkatkan performa tulis dalam mode majority.

  • Mulai dari MongoDB 8.0, node sekunder menulis dan menerapkan setiap batch oplog secara paralel. Saat thread Writer membaca entri oplog baru dari node primer dan menulisnya ke oplog lokal, thread Applier secara asinkron menerapkan perubahan ini ke database lokal. Ini meningkatkan throughput replikasi node sekunder.

Optimasi performa resharding

Mulai dari MongoDB 8.0, performa reshardCollection ditingkatkan. Anda dapat menggunakan perintah ini untuk mengubah kunci shard suatu koleksi dan distribusi data.

Referensi