Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Kueri Berjalan Panjang
Ikhtisar
Long-running kueri dapat mengalir ke masalah kinerja di seluruh klaster. Kueri ini dapat mengganggu proses pengumpulan sampah Multi-Version Concurrency Control (MVCC) Amazon DocumentDB, yang menyebabkan akumulasi dokumen berversi lama dan penurunan kinerja di seluruh cluster. Amazon DocumentDB menerapkan batas waktu sisi server 2 jam sebagai mekanisme keamanan untuk membatasi kueri pelarian dari mengkonsumsi sumber daya tanpa batas waktu.
Apa itu Kueri yang berjalan lama:
-
Kueri yang dijalankan untuk waktu yang lama (biasanya> 30 menit)
-
Buka kursor yang tetap aktif selama berjam-jam (waktu habis 2 jam tidak akan berlaku jika kursor aktif)
Dampak pada cluster
Kueri yang berjalan lama dapat mengganggu Proses pengumpulan Sampah
-
Versi Lama Akumulasi: Pengumpul sampah tidak dapat merebut kembali versi dokumen lama
-
Collection and Index Bloat: Entri Collection and Index terakumulasi dari waktu ke waktu, kembung meningkat dan yang dapat menghasilkan lebih banyak biaya penyimpanan.
-
CPU dan Tekanan Memori: CPU dan tekanan memori meningkat karena pemrosesan yang tidak efisien dari peningkatan jumlah versi dokumen lama, entri indeks, dan ID transaksi yang tidak efisien.
Kueri Berjalan Panjang → Memblokir GC → Pertumbuhan Penyimpanan → CPU dan Tekanan Memori → Kueri Lebih Panjang
Memantau dan mendeteksi
1. Untuk menemukan kueri yang berjalan lama, gunakan perintah CurrenTop.
// To find a query running for more than 30 mins db.adminCommand({ aggregate: 1, pipeline: [ {$currentOp: {}}, {$match: {$or: [{secs_running: {$gt: 1800}}, {WaitState: {$exists: true}}]}}], cursor: {} });
2. Untuk menemukan kursor yang aktif selama lebih dari 30 menit
// To find cursor which is running more than 30 mins db.adminCommand({ "currentOp": true, "active": true, "$all": true }).inprog.filter(function(op) { return op.desc == "Cursor" && op.secs_running > 1800 && op.active == true; }).sort((a, b) => b.microsecs_running - a.microsecs_running)
3. Memantau kemajuan pengumpul sampah melalui CloudWatch
LongestRunningGCProcess— Durasi dalam hitungan detik dari proses pengumpulan sampah aktif terpanjang. Memperbarui setiap menit dan hanya melacak operasi aktif, tidak termasuk proses yang selesai dalam jendela satu menit.
AvailableMVCCIds-Penghitung yang menunjukkan jumlah operasi penulisan yang tersisa yang tersedia sebelum mencapai nol. Saat penghitung ini mencapai nol, klaster Anda memasuki mode hanya-baca hingga ID direklamasi dan didaur ulang. Penghitung berkurang dengan setiap operasi penulisan dan meningkat saat pengumpulan sampah mendaur ulang ID MVCC lama.
catatan
ID MVCC yang lebih rendah dan durasi pengumpulan sampah yang diperpanjang tidak secara eksklusif dikaitkan dengan kueri yang berjalan lama. Write-intensive beban kerja pada instans yang dibatasi sumber daya juga dapat mengakibatkan berkurangnya ketersediaan ID MVCC dan siklus pengumpulan sampah yang berkepanjangan.
Strategi Remediasi
-
Menerapkan batas waktu kueri dalam aplikasi
-
Jangan biarkan kursor tetap hidup untuk jangka waktu yang lebih lama
-
Optimalkan kueri untuk kinerja yang lebih baik.
-
Lebih suka pengelompokan operasi tulis