ApsaraDB for MongoDB 8.3 memperkenalkan perintah penghapusan shard granular, pencatatan kueri lambat yang sedang berjalan, pelacakan memori per operasi, dan ekspresi agregasi baru.
Untuk changelog komunitas, lihat MongoDB 8.3 release notes.
Ikhtisar
ApsaraDB for MongoDB 8.3 mencakup perubahan berikut:
-
Kemampuan baru
-
Optimisasi
Untuk changelog komunitas lengkap, lihat MongoDB 8.3 release notes.
Peningkatan agregasi
Akses indeks array
$map, $filter, dan $reduce kini mengekspos indeks elemen saat ini. Ikatkan ke variabel dengan arrayIndexAs atau gunakan variabel bawaan $$IDX.
// Tambahkan bidang "rank" berbasis 1 ke setiap elemen
db.scores.aggregate([
{ $project: {
ranked: { $map: {
input: "$items",
as: "item",
arrayIndexAs: "i",
in: { value: "$$item", rank: { $add: ["$$i", 1] } }
}}
}}
])
Ekspresi baru
|
Ekspresi |
Tujuan |
Kasus penggunaan contoh |
|---|---|---|
|
|
Mengembalikan subtype BinData |
Membedakan UUID dari bidang biner generik |
|
|
Menghasilkan ObjectId acak dalam pipeline |
Menetapkan ID selama |
|
|
Menghasilkan hash MD5, SHA-256, atau XXH64 |
Menghitung sidik jari konten atau kunci partisi di sisi server |
|
|
Mengonversi antara BSON dan Extended JSON |
Mengurai string JSON yang disimpan sebagai bidang teks kembali ke BSON bertipe |
Konversi tipe yang lebih luas
-
$toStringkini mendukung objek, array, ekspresi reguler, MaxKey, MinKey, dan timestamp. -
$convertmenambahkan parameterbaseuntuk konversi string atau angka dalam basis-2, -8, -10, dan -16. -
Diperkenalkan konversi baru
$toArray(string ke array, binData ke array numerik) dan$toObject(string ke objek). Lihat Convert binData to Array.
Penyempurnaan manajemen shard
Penghapusan shard granular
Persyaratan routing DDL
Peningkatan pemantauan dan diagnostik
Pencatatan kueri lambat yang sedang berjalan
Kueri lambat kini dicatat saat masih berjalan, bukan hanya setelah selesai. Setiap kueri dicatat satu kali ketika melebihi ambang batas.
Tetapkan ambang batas dengan --defaultSlowInProgMS saat startup, atau secara dinamis saat runtime:
db.setProfilingLevel(1, { slowms: 100, slowinprogms: 3000 })
Setiap entri log menyertakan originalQueryShapeHash yang menghubungkan log tingkat shard kembali ke permintaan asli pada mongos.
Pelacakan memori per operasi
Dua bidang baru ditambahkan ke $currentOp, db.currentOp(), profiler, log kueri lambat, output explain, dan PlanCache.list():
|
Bidang |
Deskripsi |
|---|---|
|
|
Memori saat ini yang dikonsumsi oleh operasi |
|
|
Puncak memori yang dikonsumsi oleh operasi |
Gunakan bidang-bidang ini untuk mengidentifikasi kueri yang memakan banyak memori dan menetapkan batas yang tepat.
queryStats pada server shard
Saat queryStats diaktifkan, server shard kini mencatat kueri yang diteruskan dari mongos. Pada versi sebelumnya, kueri tersebut tidak terlihat di tingkat shard.
Output serverStatus selektif
Metrik baru mencakup ekstensi agregasi, bagian kritis shard, operasi TTL, pencarian vektor, latensi pengambilan oplog replikasi, dan penerimaan antrian eksekusi.
Gunakan flag baru none: 1 untuk menonaktifkan semua bagian opsional, lalu aktifkan secara selektif:
db.runCommand({ serverStatus: 1, none: 1, locks: 1 })
Gunakan lockContentionMetrics: 1 untuk menyertakan data contention lock sesuai permintaan.
Bidang service telah dihapus dari output serverStatus.
Peningkatan retensi FTDC
Batas direktori diagnostik FTDC default ditingkatkan dari 200 MB menjadi 500 MB. connPoolStats kini dikumpulkan untuk mongod.
Parameter kinerja dan sistem
Batas resource pra-otentikasi
Tiga parameter baru membatasi resource yang dikonsumsi oleh koneksi yang belum diautentikasi:
|
Parameter |
Tujuan |
|---|---|
|
|
Membatasi total memori untuk buffer pra-otentikasi |
|
|
Membatasi laju respons error ukuran pesan |
|
|
Membatasi ukuran maksimum isi pesan sebelum otentikasi |
Pengaturan ini melindungi instans dari kehabisan resource akibat serangan flooding koneksi.
Pemulihan tekanan cache otomatis
cachePressureQueryPeriodMilliseconds mengontrol frekuensi pemeriksaan tekanan cache oleh mesin penyimpanan. Saat tekanan terdeteksi, transaksi tertua secara otomatis dihentikan untuk membebaskan cache.
Pemilihan server yang sadar beban berlebih
Saat overloadAwareServerSelectionEnabled diaktifkan, klien yang menerima SystemOverloadedError secara otomatis mencoba ulang ke node berbeda.
Lima parameter mengatur penyesuaian backoff percobaan ulang untuk koneksi internal antara mongos dan mongod:
|
Parameter |
Kontrol |
|---|---|
|
|
Delay percobaan ulang awal |
|
|
Delay percobaan ulang maksimum |
|
|
Jumlah percobaan ulang maksimum |
|
|
Ukuran pool token percobaan ulang beban berlebih per shard |
|
|
Laju pengembalian token pada permintaan sukses |
Pengecualian pembatasan laju Ingress
ingressRequestRateLimiterApplicationExemptions mengecualikan aplikasi tertentu (berdasarkan appName) dari batas laju ingress. Tetapkan nama aplikasi dalam string koneksi:
mongodb://server:27017/db?appname=mongodump
Kontrol dampak profiler
Dua parameter mencegah profiler menurunkan kinerja produksi:
|
Parameter |
Tujuan |
|---|---|
|
|
Timeout global untuk lock profiling |
|
|
Batas atas penulisan profiler yang ditinggalkan per database per detik |
Pantau overhead profiler melalui profiler.totalAbandonedWrites dan profiler.dbsPastThreshold dalam serverStatus.
Perubahan indeks
Peningkatan versi default 2dsphere
2dsphereVersion default berubah dari 3 menjadi 4.
Sebelum menurunkan spesifikasi FCV di bawah 8.3, hapus terlebih dahulu semua indeks 2dsphere versi-4.
Prioritas GeoJSON dalam pembuatan indeks
Saat dokumen berisi koordinat GeoJSON dan koordinat numerik lama, pembuatan indeks kini memprioritaskan GeoJSON. Jika Anda mengandalkan koordinat lama dalam indeks yang ada, bangun ulang indeks tersebut setelah upgrade.
Perubahan time series
|
Perubahan |
Detail |
|---|---|
|
Batasan kunci shard |
|
|
Pemberian nama indeks |
Indeks time-series tidak lagi dapat diberi nama |
|
Pemberian nama timeField |
Nama |
Perubahan perilaku
|
Area |
Perubahan |
Perilaku sebelumnya |
|---|---|---|
|
Kode kesalahan upsert |
Upsert yang menghasilkan objek BSON > 16 MB mengembalikan kode kesalahan 10334 ( |
Mengembalikan 17419 atau 17420 |
|
validate |
|
Tidak ada pemeriksaan 16 MB; validasi penuh mengaktifkan konformansi BSON |
|
Aritmetika tanggal |
|
Lebih cepat tetapi kurang akurat |
|
Penguraian float |
Kisaran penuh float presisi ganda (termasuk subnormal seperti |
Subnormal ditolak |
|
Batas karakter $trim |
Argumen |
Tidak ada batas |
|
$mergeObjects |
Kini dapat digunakan di dalam |
Tidak didukung |
|
Teks atau memori |
Tahap TextOr ( |
Tidak ada batas |
|
explain pada DB tidak ada |
|
Database dibuat secara implisit |
|
config.csrs.indexes |
Koleksi sistem |
Saat ini |
|
findShardsOnConfigTimeoutMS |
Parameter baru yang membatasi waktu kueri pada |
Tidak ada timeout |