Untuk instans ApsaraDB for MongoDB, Anda dapat memodifikasi parameter di Konsol. Nilai yang tidak tepat untuk beberapa parameter penting dapat menyebabkan masalah performa instans atau error pada aplikasi. Oleh karena itu, topik ini memberikan rekomendasi optimasi untuk parameter kunci guna mengurangi kekhawatiran Anda selama konfigurasi.
Topik ini hanya mencakup parameter kernel dan tidak termasuk parameter driver sisi client, seperti socketTimeout.
Replica set
operationProfiling.mode
-
Versi utama yang didukung: 3.0 atau lebih baru
-
Restart diperlukan: Ya
-
Nilai default:
off -
Fungsi: Menentukan tingkat profiling untuk query profiler.
-
Masalah:
-
Jika parameter ini diatur ke
allatauslowOp, volume besar log kueri lambat yang dihasilkan dapat menurunkan performa instans dan mempersulit analisis. -
Beberapa pengguna mungkin bingung dengan munculnya koleksi
system.profiledi database mereka jika lupa menonaktifkan query profiler. -
Beberapa pengguna keliru menganggap bahwa parameter ini harus diatur ke
slowOpagar log kueri lambat dapat dihasilkan.
-
-
Rekomendasi:
Pertahankan nilai default. Log kueri lambat menyediakan informasi analitis serupa tanpa overhead performa dari query profiler. Aktifkan fitur ini hanya jika diperlukan dan segera nonaktifkan setelah analisis selesai. Untuk informasi lebih lanjut tentang Database Profiler, lihat dokumentasi resmi MongoDB.
operationProfiling.slowOpThresholdMs
-
Versi utama yang didukung: 3.0 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
100 -
Fungsi: Menetapkan ambang batas (dalam milidetik) untuk menganggap suatu kueri sebagai lambat.
-
Masalah:
-
Mengatur nilai terlalu rendah dapat menghasilkan volume besar log kueri lambat dan log audit, sehingga menimbulkan kebisingan yang mempersulit analisis.
-
Mengatur nilai terlalu tinggi dapat mencegah banyak kueri lambat dicatat, sehingga menghambat proses analisis.
-
-
Rekomendasi: Sesuaikan ambang batas berdasarkan workload Anda. Kami merekomendasikan mengatur nilai sedikit lebih tinggi dari latensi rata-rata kueri kritis Anda. Contohnya:
-
Untuk aplikasi yang sensitif terhadap latensi dengan kueri tipikal sekitar 30 ms, pertimbangkan menurunkan ambang batas menjadi 50 untuk membantu menganalisis fluktuasi performa sementara.
-
Untuk aplikasi berat analitik dengan kueri tipikal 300–400 ms, pertimbangkan menaikkan ambang batas menjadi 500 ms untuk mengurangi kebisingan log.
-
replication.oplogGlobalIdEnabled
-
Versi utama yang didukung: 4.0 atau lebih baru
-
Restart diperlukan: Ya
-
Nilai default:
false -
Parameter kustom Alibaba Cloud ini mengaktifkan Global ID (GID) dalam oplog untuk mendukung sinkronisasi dua arah dengan alat seperti Data Transmission Service (DTS) atau mongoShake. GID mencegah masalah replikasi melingkar dalam konfigurasi tersebut.
-
Rekomendasi: Aktifkan parameter ini hanya saat sinkronisasi dua arah diperlukan. Perubahan ini memerlukan restart instans, sehingga kami merekomendasikan penerapannya pada jam sepi.
replication.oplogSizeMB
-
Versi utama yang didukung: 3.0 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
10% dari disk space instans. Misalnya, jika instans memiliki disk space 500 GB, nilai awaloplogSizeMBadalah 51.200 (50 GB). -
Fungsi: Menentukan ukuran logis maksimum koleksi oplog, yang menyimpan log replikasi.
-
Masalah: Nilai yang terlalu rendah dapat menyebabkan node secondary tertinggal dan masuk ke status RECOVERING. Hal ini juga dapat menciptakan celah dalam cadangan log, sehingga mencegah pemulihan pada titik waktu.
-
Rekomendasi: Pertahankan nilai default. Jangan turunkan nilainya. Naikkan hanya jika diperlukan. Pertimbangkan menaikkan nilai untuk workload dengan volume data rendah tetapi laju update tinggi, yang menghasilkan entri oplog dengan cepat. Nilai
oplogSizeMByang lebih besar memungkinkan oplog mencakup rentang waktu lebih panjang, sehingga mencegah celah. Sebagai praktik terbaik, ukuran oplog harus cukup besar untuk menyimpan setidaknya satu jam catatan oplog.
Parameter ini tidak dimodifikasi dalam file konfigurasi. Sebaliknya, lapisan kontrol Alibaba Cloud menggunakan perintah replsetResizeOplog untuk menyesuaikan ukuran oplog.
setParameter.cursorTimeoutMillis
-
Versi utama yang didukung: 3.0 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
600000(10 menit) -
Fungsi: Menentukan timeout dalam milidetik untuk cursor yang idle. MongoDB secara otomatis membersihkan cursor apa pun yang idle lebih lama dari ambang batas ini.
-
Masalah: Jika Anda mencoba mengakses cursor yang telah kedaluwarsa dan dibersihkan, client akan menerima error dalam format berikut:
Message: "cursor id xxxxxxx not found" ErrorCode: CursorNotFound(43) -
Rekomendasi: Kami tidak merekomendasikan menaikkan nilai ini. Untuk mengurangi overhead resource dari cursor idle, Anda dapat menurunkan nilai (misalnya, menjadi 300000). Dalam semua skenario, aplikasi Anda harus menghindari pembuatan cursor idle berumur panjang.
setParameter.flowControlTargetLagSeconds
-
Versi utama yang didukung: 4.2 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
10 -
Fungsi: Menentukan ambang batas yang memicu mekanisme flow control. Tujuan flow control adalah memastikan bahwa majority commit point tidak tertinggal terlalu jauh.
-
Masalah: Latensi request meningkat secara signifikan, dan muncul log kueri lambat seperti contoh berikut. Nilai
durationMillisyang hampir sama denganflowControl.timeAcquiringMicrosmenunjukkan bahwa mekanisme flow control memperlambat request tersebut.{ "t": { "$date": "2024-04-25T13:28:45.840+08:00" }, "s": "I", "c": "WRITE", "id": 51803, "ctx": "conn199253", "msg": "Slow query", "attr": { "type": "update", "ns": "xxx.xxxxx", "command": ..., "planSummary": "IDHACK", "totalOplogSlotDurationMicros": 61, "keysExamined": 1, "docsExamined": 1, "nMatched": 1, "nModified": 1, "nUpserted": 0, "keysInserted": 0, "keysDeleted": 0, "numYields": 0, "locks": ..., "flowControl": { "acquireCount": 1, "acquireWaitCount": 1, "timeAcquiringMicros": 959000 }, "readConcern": { "level": "local", "provenance": "implicitDefault" }, "storage": {}, "cpuNanos": 258845, "remote": "172.16.6.38:52368", "durationMillis": 959 } } -
Rekomendasi: Anda dapat menaikkan nilai ini agar mekanisme flow control kurang sensitif. Jika request masih sering dikendalikan setelah menaikkan nilai, hal ini menunjukkan potensi bottleneck performa dalam replikasi. Dalam kasus ini, Anda perlu melakukan analisis lebih lanjut dan mengambil tindakan lain, seperti meningkatkan konfigurasi instans atau mengatur write concern ke
majority.
setParameter.oplogFetcherUsesExhaust
-
Versi utama yang didukung: 4.4 atau lebih baru
-
Restart diperlukan: Ya
-
Nilai default:
true -
Fungsi: Menentukan apakah akan mengaktifkan stream replication. Jika fitur ini dinonaktifkan, replikasi kembali ke metode pull versi sebelumnya. Dalam metode ini, node secondary meminta batch entri oplog dari sumber sinkronisasinya, memerlukan round-trip jaringan untuk setiap batch.
-
Masalah: Dalam beberapa skenario, mekanisme stream replication dapat menimbulkan overhead performa dan network bandwidth tambahan.
-
Rekomendasi: Kami merekomendasikan agar Anda tidak mengubah pengaturan ini. Stream replication dapat mengurangi latensi replikasi di lingkungan dengan beban tinggi dan latensi jaringan tinggi. Fitur ini juga dapat mengurangi risiko kehilangan write jika node primary mati secara tak terduga saat
writeConcerndiatur ke{w:1}, serta mengurangi latensi write untuk pengaturanwriteConcernlain yang bergantung pada replikasi primary-secondary, seperti{w:majority}atau{w:>1}.
setParameter.maxTransactionLockRequestTimeoutMillis
-
Versi utama yang didukung: 4.0 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
5 -
Fungsi: Menentukan timeout, dalam milidetik, bagi transaksi untuk mendapatkan lock. Jika operasi dalam transaksi tidak dapat memperoleh lock yang diperlukan dalam periode ini, transaksi tersebut akan otomatis dibatalkan.
-
Masalah: Pesan error timeout lock berikut muncul di log atau dikembalikan ke client. Driver modern mungkin secara otomatis mencoba ulang pada
TransientTransactionError, sehingga error mungkin hanya terlihat di log dan tidak dirasakan oleh client.Message: "Unable to acquire lock '{8442595743001781021: Database, 1525066715360699165}' within a max lock request timeout of '5ms' milliseconds." ErrorCode: LockTimeout(24) -
Rekomendasi: Jika client Anda sering mengalami error ini, pertimbangkan menaikkan nilai ini. Hal ini dapat mengurangi pembatalan akibat kegagalan lock sementara, tetapi mungkin menunda penghentian transaksi yang terlibat dalam deadlock. Jika masalah berlanjut, optimalkan logika aplikasi Anda daripada terus menaikkan nilai. Misalnya, hindari modifikasi konkuren pada dokumen yang sama dan tinjau operasi untuk tugas jangka panjang (seperti DDL atau kueri tidak optimal) yang dapat menahan lock dalam waktu lama.
setParameter.replWriterThreadCount
-
Versi utama yang didukung: 3.2 atau lebih baru
-
Restart diperlukan: Ya
-
Nilai default:
16 -
Fungsi: Menentukan jumlah maksimum thread untuk replikasi paralel. Jumlah efektif maksimum thread adalah dua kali jumlah core CPU instans.
-
Masalah: Dalam kasus ekstrem, lag replikasi pada node secondary terus meningkat.
-
Rekomendasi: Kami tidak merekomendasikan mengubah pengaturan ini dalam kebanyakan kasus. Dalam keadaan khusus, sesuaikan parameter ini hanya di bawah panduan insinyur dukungan Alibaba Cloud.
setParameter.tcmallocAggressiveMemoryDecommit
-
Versi utama yang didukung: 4.2 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
0(menonaktifkan decommit memori agresif TCMalloc) -
Fungsi: MongoDB menggunakan allocator memori TCMalloc. Parameter ini mengontrol kebijakan decommit agresif TCMalloc, yang secara proaktif menggabungkan blok memori bebas yang berdekatan dan mengembalikannya ke sistem operasi.
-
Masalah:
-
Node mongod mengalami error kehabisan memori (OOM) karena memori tidak dapat dipulihkan cukup cepat akibat konsumsi memori tinggi dari kueri.
-
Saat instans berjalan, fragmentasi memori heap meningkat, menyebabkan pemanfaatan memori terus naik di atas 80%.
-
-
Rekomendasi: Kami tidak merekomendasikan mengubah pengaturan ini dalam kebanyakan kasus. Jika Anda mengalami masalah terkait memori, pertimbangkan menyesuaikan parameter ini pada jam sepi.
Mengaktifkan parameter ini dapat menyebabkan degradasi performa, tergantung pada workload Anda. Aktifkan parameter ini hanya pada jam sepi. Setelah perubahan, pantau aplikasi Anda secara ketat. Jika Anda mengamati dampak negatif, segera kembalikan perubahan parameter tersebut.
setParameter.transactionLifetimeLimitSeconds
-
Versi utama yang didukung: 4.0 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
60 -
Fungsi: Menentukan masa berlaku transaksi, dalam detik. Jika total waktu eksekusi transaksi melebihi batas ini, transaksi tersebut ditandai sebagai kedaluwarsa dan dibatalkan oleh thread pembersihan latar belakang periodik.
-
Masalah: Client menerima error dalam format berikut:
Message: "Aborting transaction with txnNumber xxx on session with lsid xxxxxxxxxx because it has been running for longer than 'transactionLifetimeLimitSeconds'" -
Rekomendasi: Anda dapat menurunkan nilai ini (misalnya, menjadi
30), tetapi tidak disarankan menaikkannya. Transaksi tidak ter-commit yang berjalan lama dapat memberikan tekanan signifikan pada cache Mesin penyimpanan WiredTiger. Cache yang kelebihan beban sering menyebabkan lebih banyak masalah, seperti database membekukan, lonjakan tajam latensi request, dan pemanfaatan CPU maksimal, yang dapat menurunkan layanan Anda. Aplikasi Anda harus menghindari transaksi berjalan lama sebisa mungkin. Untuk mengatasi masalah timeout, Anda harus memecah transaksi menjadi bagian-bagian lebih kecil agar dapat diselesaikan dalam batas waktu yang dikonfigurasi. Anda juga perlu memastikan bahwa kueri Anda dioptimalkan dan memiliki cakupan indeks yang tepat untuk akses data cepat dalam transaksi.
Untuk informasi lebih lanjut tentang praktik terbaik untuk transaksi, lihat Transactions and Read/Write Concern.
storage.oplogMinRetentionHours
-
Versi utama yang didukung: 4.4 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
0(Nilai 0 menunjukkan bahwa parameter ini dinonaktifkan, dan ukuran oplog sepenuhnya dikontrol oleh parameterreplication.oplogSizeMB.) -
Fungsi: Menentukan periode retensi minimum dalam jam untuk oplog.
-
Masalah:
-
Mengatur nilai terlalu tinggi dapat menyebabkan oplog mengonsumsi disk space berlebihan.
-
Beberapa pengguna mungkin lupa telah mengatur parameter ini dan menjadi bingung oleh fluktuasi penggunaan disk space instans.
-
-
Rekomendasi: Untuk workload yang relatif stabil, pertahankan nilai default. Untuk workload yang mungkin mengalami fluktuasi signifikan dalam operasi write, kami merekomendasikan mengatur parameter ini ke bilangan titik mengambang lebih besar dari 1,0. Saat mengatur parameter ini, Anda juga harus mengevaluasi potensi konsumsi disk space untuk menghindari masalah lain akibat disk penuh.
storage.wiredTiger.collectionConfig.blockCompressor
-
Versi utama yang didukung: 3.0 atau lebih baru
-
Restart diperlukan: Ya
-
Nilai default:
snappy -
Fungsi: Menentukan algoritma kompresi penyimpanan untuk data koleksi. Pengaturan ini hanya berlaku untuk tabel yang baru dibuat dan tidak memengaruhi tabel yang sudah ada. Saat ini, algoritma yang didukung adalah tanpa kompresi,
snappy,zlib, danzstd. Algoritmazstdhanya didukung pada versi 4.2 dan lebih baru. -
Rekomendasi: Modifikasi sesuai kebutuhan. Algoritma kompresi berbeda menawarkan performa berbeda. Beberapa memberikan rasio kompresi lebih tinggi tetapi dengan biaya overhead CPU lebih besar selama kompresi dan dekompresi. Perbandingan antar algoritma kompresi harus didasarkan pada hasil pengujian Anda sendiri. Jika instans terutama digunakan untuk menyimpan data dingin, pertimbangkan mengubah parameter ini ke
zstduntuk mencapai rasio kompresi lebih tinggi.CatatanJika Anda ingin menggunakan algoritma kompresi berbeda untuk koleksi berbeda, Anda perlu menggunakan perintah eksplisit
createCollectiondengan opsi terkait. Untuk informasi lebih lanjut, lihat dokumentasi resmi MongoDB.
setParameter.minSnapshotHistoryWindowInSeconds/setParameter.maxTargetSnapshotHistoryWindowInSeconds
-
Versi utama yang didukung: 4.4 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
300(5 menit) -
Fungsi: Menentukan ukuran jendela dalam detik yang digunakan Mesin penyimpanan WiredTiger untuk menyimpan riwayat snapshot. Nilai 0 menonaktifkan jendela riwayat snapshot. Parameter ini terutama digunakan untuk mendukung pembacaan pada atClusterTime tertentu.
-
Masalah: Parameter ini dapat meningkatkan tekanan pada cache WiredTiger, terutama dalam skenario dengan pembaruan frekuen pada dokumen yang sama.
-
Rekomendasi: Kami tidak merekomendasikan mengubah pengaturan ini dalam kebanyakan kasus.
-
Jika aplikasi Anda tidak menggunakan fitur
read atClusterTime, Anda dapat mengatur parameter ini ke 0 untuk mendapatkan peningkatan performa kecil. -
Jika aplikasi Anda perlu membaca data snapshot historis yang lebih tua dari 5 menit, Anda dapat menaikkan nilai ini. Namun, perlu diingat bahwa hal ini akan menyebabkan konsumsi memori dan overhead performa tambahan.
CatatanJika nilai parameter ini rendah, dan Anda menentukan waktu yang terlalu lama saat membaca snapshot historis, Anda akan menerima error
SnapshotTooOld. -
rsconf.chainingAllowed
-
Versi utama yang didukung: 4.0 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
true -
Fungsi: Menentukan apakah replikasi berantai diizinkan dalam replica set.
-
Masalah:
-
Menonaktifkan replikasi berantai dapat meningkatkan beban pada node primary, seperti pemanfaatan CPU dan network traffic.
-
Mengaktifkan replikasi berantai dapat meningkatkan lag replikasi pada node secondary.
-
-
Rekomendasi:
-
Untuk replica set dengan empat node atau kurang: Anda dapat mengaktifkan atau menonaktifkan replikasi berantai sesuai kebutuhan.
-
Ketika jumlah node besar (5 atau lebih), Anda perlu membuat pertimbangan lebih lanjut antara beban node primary dan performa instans hanya saat
writeConcerndikonfigurasi sebagai{w:majority}. Menonaktifkan replikasi berantai membantu meningkatkan performa write, tetapi beban yang sesuai pada node primary juga meningkat secara signifikan.
-
setParameter.internalQueryMaxPushBytes/setParameter.internalQueryMaxAddToSetBytes
-
Versi utama yang didukung: 4.2 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default: 104.857.600 B (100 MB)
-
Fungsi: Membatasi penggunaan memori maksimum untuk operator
$pushdan$addToSet. -
Gejala: Pernyataan SQL tertentu yang berisi
$pushatau$addToSetgagal dieksekusi dan mengembalikan pesan error berikut."errMsg": "$push used too much memory and cannot spill to disk. Memory limit: 104857600... -
Rekomendasi: Kami tidak merekomendasikan mengubah pengaturan ini dalam kebanyakan kasus. Jika Anda mengalami error di atas saat mengeksekusi kueri tertentu, Anda dapat mempertimbangkan menaikkan nilai ini. Namun, perlu diingat bahwa mengatur nilai terlalu tinggi dapat menyebabkan node mongod mengalami error kehabisan memori (OOM).
Kluster sharded (shard)
setParameter.migrateCloneInsertionBatchSize
-
Versi utama yang didukung: 4.0 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
0(dibatasi oleh batas ukuran dokumen 16 MB) -
Fungsi: Menentukan jumlah maksimum dokumen dalam satu batch selama langkah kloning migrasi chunk.
-
Masalah: Migrasi chunk dapat menyebabkan fluktuasi performa pada shard.
-
Rekomendasi: Kami tidak merekomendasikan mengubah pengaturan ini dalam kebanyakan kasus. Jika instans kluster sharded Anda mengalami fluktuasi performa selama balancing akibat migrasi chunk, pertimbangkan mengatur parameter ini ke ukuran batch tetap.
setParameter.rangeDeleterBatchDelayMS
-
Versi utama yang didukung: 4.0 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
20 -
Fungsi: Menentukan interval untuk penghapusan batch selama langkah pembersihan migrasi chunk. Pengaturan ini juga memengaruhi perintah
cleanupOrphaneduntuk membersihkan dokumen yatim. Satuannya adalah milidetik. -
Masalah:
-
Dalam beberapa skenario, penghapusan dokumen asinkron setelah migrasi chunk dapat menyebabkan lonjakan pemanfaatan CPU.
-
Mengatur nilai terlalu tinggi dapat menyebabkan dokumen menjadi yatim karena tidak dihapus tepat waktu. Hal ini juga dapat menyebabkan timeout jika terlalu banyak dokumen perlu dihapus, menghasilkan log error berikut:
Message: "OperationFailed: Data transfer error: ExceededTimeLimit: Failed to delete orphaned <db>.<collection> range [xxxxxx,xxxxx] :: caused by :: operation exceeded time limit"
-
-
Rekomendasi: Secara umum, tidak diperlukan penyesuaian. Jika pemanfaatan CPU instans kluster sharded Anda melonjak selama balancing akibat penghapusan dokumen asinkron, Anda dapat menaikkan parameter ini, misalnya, menjadi
200.
setParameter.rangeDeleterBatchSize
-
Versi utama yang didukung: 4.0 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
0(secara otomatis memilih ukuran batch yang wajar, biasanya 128) -
Fungsi: Menentukan jumlah maksimum dokumen dalam satu batch untuk penghapusan asinkron selama langkah pembersihan migrasi chunk.
-
Masalah: Dalam beberapa skenario, penghapusan dokumen asinkron setelah migrasi chunk dapat menyebabkan lonjakan pemanfaatan CPU.
-
Rekomendasi: Kami tidak merekomendasikan mengubah pengaturan ini dalam kebanyakan kasus. Jika pemanfaatan CPU instans kluster sharded Anda melonjak selama balancing akibat penghapusan dokumen asinkron, pertimbangkan mengatur parameter ini ke ukuran batch tetap.
Parameter ini dan setParameter.rangeDeleterBatchDelayMS bekerja bersama untuk mengontrol proses penghapusan dokumen asinkron setelah migrasi chunk. Anda dapat menyesuaikannya secara terpisah, kombinasi, atau bertahap.
setParameter.receiveChunkWaitForRangeDeleterTimeoutMS
-
Versi utama yang didukung: 4.4 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
10000(10 detik) -
Fungsi: Menentukan timeout, dalam milidetik, untuk menunggu dokumen yatim dihapus sebelum migrasi chunk.
-
Masalah: Saat balancer berjalan, Anda mungkin melihat log error timeout seperti berikut:
ExceededTimeLimit: Failed to delete orphaned <db.collection> range [{ <shard_key>: MinKey }, { <shard_key>: -9186000910690368367 }) :: caused by :: operation exceeded time limit -
Rekomendasi: Kami tidak merekomendasikan mengubah pengaturan ini dalam kebanyakan kasus. Jika Anda mengalami error di atas, Anda dapat menaikkan nilai ini agar operasi
moveChunkmenunggu lebih lama hingga penghapusan dokumen yatim selesai, sehingga menghindari error timeout tersebut.
setParameter.minSnapshotHistoryWindowInSeconds/setParameter.maxTargetSnapshotHistoryWindowInSeconds
-
Versi utama yang didukung: 4.4 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
300(5 menit) -
Fungsi: Menentukan ukuran jendela dalam detik yang digunakan Mesin penyimpanan WiredTiger untuk menyimpan riwayat snapshot. Nilai 0 menonaktifkan jendela riwayat snapshot. Parameter ini terutama digunakan untuk mendukung pembacaan pada atClusterTime tertentu.
-
Masalah: Parameter ini dapat meningkatkan tekanan pada cache WiredTiger, terutama dalam skenario dengan pembaruan frekuen pada dokumen yang sama.
-
Rekomendasi: Kami tidak merekomendasikan mengubah pengaturan ini dalam kebanyakan kasus.
-
Jika aplikasi Anda tidak menggunakan fitur
read atClusterTime, Anda dapat mengatur parameter ini ke 0 untuk mendapatkan peningkatan performa kecil. -
Jika aplikasi Anda perlu membaca data snapshot historis yang lebih tua dari 5 menit, Anda dapat menaikkan nilai ini. Namun, perlu diingat bahwa hal ini akan menyebabkan konsumsi memori dan overhead performa tambahan.
CatatanJika nilai parameter ini rendah, dan Anda menentukan waktu yang terlalu lama saat membaca snapshot historis, Anda akan menerima error
SnapshotTooOld. -
rsconf.chainingAllowed
-
Versi utama yang didukung: 4.0 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
true -
Fungsi: Menentukan apakah replikasi berantai diizinkan dalam shard.
-
Masalah:
-
Menonaktifkan replikasi berantai dapat meningkatkan beban pada node primary, seperti pemanfaatan CPU dan network traffic.
-
Mengaktifkan replikasi berantai dapat meningkatkan lag replikasi pada node secondary.
-
-
Rekomendasi:
-
Untuk shard dengan empat node atau kurang: Anda dapat mengaktifkan atau menonaktifkan replikasi berantai sesuai kebutuhan.
-
Jika Anda memiliki jumlah node besar (5 atau lebih) dan
writeConcerndikonfigurasi sebagai{w:majority}, Anda harus membuat pertimbangan antara beban pada node primary dan performa instans. Menonaktifkan replikasi berantai meningkatkan performa write, tetapi juga secara signifikan meningkatkan beban pada node primary.
-
setParameter.periodicNoopIntervalSecs
-
Versi utama yang didukung: 4.2 atau lebih baru
-
Restart diperlukan: Ya
-
Nilai default:
10 -
Fungsi: Interval dalam detik untuk write no-op (noop).
-
Masalah: Saat Anda menggunakan Change Streams, shard dengan aktivitas write rendah dapat menjadi bottleneck untuk mongos saat mengagregasi perubahan. Hal ini dapat menyebabkan delay Change Stream sekitar 10 detik.
-
Rekomendasi: Kami tidak merekomendasikan mengubah pengaturan ini dalam kebanyakan kasus. Jika Anda mengalami delay tersebut saat menggunakan Change Streams, pertimbangkan menurunkan parameter ini menjadi
1. Hal ini meningkatkan frekuensi write no-op dan mencegah delay konsumsi Change Stream akibat aktivitas write rendah pada satu shard.
setParameter.internalQueryMaxPushBytes/setParameter.internalQueryMaxAddToSetBytes
-
Versi utama yang didukung: 4.2 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default: 104.857.600 B (100 MB)
-
Fungsi: Membatasi penggunaan memori maksimum untuk operator
$pushdan$addToSet. -
Gejala: Pernyataan SQL tertentu yang berisi
$pushatau$addToSetgagal dieksekusi dan mengembalikan pesan error berikut."errMsg": "$push used too much memory and cannot spill to disk. Memory limit: 104857600... -
Rekomendasi: Kami tidak merekomendasikan mengubah pengaturan ini dalam kebanyakan kasus. Jika Anda mengalami error di atas saat mengeksekusi kueri tertentu, Anda dapat mempertimbangkan menaikkan nilai ini. Namun, perlu diingat bahwa mengatur nilai terlalu tinggi dapat menyebabkan node mongod mengalami error kehabisan memori (OOM).
Kluster sharded (mongos)
operationProfiling.slowOpThresholdMs
-
Versi utama yang didukung: 3.0 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
100 -
Fungsi: Menentukan ambang batas, dalam milidetik, agar suatu kueri dianggap lambat.
-
Masalah:
-
Mengatur nilai terlalu rendah dapat menghasilkan volume besar log kueri lambat dan log audit, sehingga menimbulkan kebisingan yang mempersulit analisis.
-
Mengatur nilai terlalu tinggi dapat mencegah banyak kueri lambat dicatat, sehingga menghambat proses analisis.
-
-
Rekomendasi: Sesuaikan ambang batas berdasarkan workload Anda. Kami merekomendasikan mengatur nilai sedikit lebih tinggi dari latensi rata-rata kueri kritis Anda. Contohnya:
-
Untuk aplikasi yang sensitif terhadap latensi dengan kueri tipikal sekitar 30 ms, pertimbangkan menurunkan ambang batas menjadi 50 untuk membantu menganalisis fluktuasi performa sementara.
-
Untuk aplikasi berat analitik dengan kueri tipikal 300–400 ms, pertimbangkan menaikkan ambang batas menjadi 500 ms untuk mengurangi kebisingan log.
-
setParameter.ShardingTaskExecutorPoolMaxConnecting
-
Versi utama yang didukung: 3.6 atau lebih baru
-
Restart diperlukan:
-
Untuk versi 3.6 dan 4.0: Ya
-
Untuk versi 4.2 dan lebih baru: Tidak
-
-
Nilai default:
2 -
Fungsi: Menentukan jumlah maksimum koneksi bersamaan yang dapat dibuat oleh kolam koneksi TaskExecutor pada node mongos selama inisialisasi. Parameter ini mengontrol laju pembuatan koneksi dari mongos ke node shard.
-
Masalah: Jika nilai ini diatur terlalu tinggi, pembuatan banyak koneksi sekaligus dapat menyebabkan lonjakan pemanfaatan CPU pada node mongos.
-
Rekomendasi: Kami tidak merekomendasikan mengubah pengaturan ini.
setParameter.ShardingTaskExecutorPoolMaxSize
-
Versi utama yang didukung: 3.6 atau lebih baru
-
Restart diperlukan:
-
Untuk versi 3.6 dan 4.0: Ya
-
Untuk versi 4.2 dan lebih baru: Tidak
-
-
Nilai default:
2^64-1(nilai maksimum untuk integer 64-bit) -
Fungsi: Menentukan jumlah maksimum koneksi dalam setiap kolam koneksi TaskExecutor pada node mongos.
-
Rekomendasi: Tidak diperlukan penyesuaian. Anda dapat mengatur parameter ini untuk membatasi ukuran kolam koneksi dari mongos ke shard, tetapi kami tidak merekomendasikan mengatur nilai terlalu rendah. Nilai yang terlalu kecil dapat menyebabkan request pada mongos diblokir saat kolam koneksi habis.
setParameter.ShardingTaskExecutorPoolMinSize
-
Versi utama yang didukung: 3.6 atau lebih baru
-
Restart diperlukan:
-
Untuk versi 3.6 dan 4.0: Ya
-
Untuk versi 4.2 dan lebih baru: Tidak
-
-
Nilai default:
1 -
Fungsi: Menentukan jumlah minimum koneksi dalam setiap kolam koneksi TaskExecutor pada node mongos.
-
Masalah: Lonjakan request mendadak dapat memaksa kolam koneksi TaskExecutor pada node mongos membuat banyak koneksi baru sekaligus, yang dapat menyebabkan lonjakan pemanfaatan CPU dan masalah lainnya.
-
Rekomendasi: Atur nilai wajar dalam rentang
[10,50]. Nilai spesifik harus bergantung pada topologi instans shard (jumlah shard dan jumlah node dalam setiap shard). Harap dicatat bahwa mongos menimbulkan overhead resource kecil untuk mempertahankan koneksi idle ini ke shard.
setParameter.cursorTimeoutMillis
-
Versi utama yang didukung: 3.0 atau lebih baru
-
Restart diperlukan: Tidak
-
Nilai default:
600000(10 menit) -
Fungsi: Menentukan ambang batas kedaluwarsa untuk cursor idle, dalam milidetik. MongoDB secara otomatis membersihkan cursor apa pun yang idle lebih lama dari ambang batas ini.
-
Masalah: Jika Anda mencoba mengakses cursor yang telah kedaluwarsa dan dibersihkan, client akan menerima error dalam format berikut:
Message: "cursor id xxxxxxx not found" ErrorCode: CursorNotFound(43) -
Rekomendasi: Kami tidak merekomendasikan menaikkan nilai ini. Untuk mengurangi overhead resource dari cursor idle, Anda dapat menurunkan nilai (misalnya, menjadi 300000). Dalam semua skenario, aplikasi Anda harus menghindari pembuatan cursor idle berumur panjang.