Pemprofil Pangkalan Data dan Log Pertanyaan Perlahan
Pelajar akan mendayakan pemprofil, menetapkan ambang slowms dan membuat pertanyaan pada system.profile untuk mencari operasi yang paling mahal.
Pemprofil Pangkalan Data dan Log Pertanyaan Perlahan ialah pelajaran MongoDB Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran MongoDB Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus MongoDB Academy merangkumi sejumlah 4 pelajaran.
Mengapa Pemprofilan Penting
MongoDB boleh menjalankan ribuan pertanyaan sesaat, tetapi beberapa pertanyaan perlahan boleh menjejaskan keseluruhan aplikasi. Pemprofil pangkalan data dan log pertanyaan perlahan ialah alat utama Anda untuk mencari operasi yang mahal ini. Alat tersebut merekodkan butiran pelaksanaan pertanyaan — tempoh, dokumen yang diperiksa dan penggunaan indeks — supaya Anda boleh mengenal pasti serta membaiki kesesakan sebelum pengguna menyedarinya.
Tahap Pemprofil: 0, 1 dan 2
Pemprofil mempunyai tiga tahap: Tahap 0 — dimatikan, tiada apa-apa direkodkan. Tahap 1 — merekodkan operasi yang mengambil masa lebih lama daripada ambang slowms (lalai 100 ms). Ini ialah tetapan yang disyorkan untuk produksi. Tahap 2 — merekodkan setiap operasi tanpa mengira tempoh. Tahap 2 berguna semasa penyahpepijatan tetapi menghasilkan overhed penulisan yang terlalu tinggi untuk penggunaan produksi berterusan.
// Enable level 1 profiling with 50ms threshold
db.setProfilingLevel(1, { slowms: 50 })
// Enable level 2 (capture everything)
db.setProfilingLevel(2)
// Turn profiling off
db.setProfilingLevel(0)Koleksi system.profile
Operasi yang diprofil ditulis ke dalam koleksi terhad system.profile dalam setiap pangkalan data. Setiap dokumen dalam koleksi ini mewakili satu operasi dan mengandungi: op (jenis operasi), ns (ruang nama), command (pertanyaan atau kemas kini), millis (tempoh), keysExamined, docsExamined, nreturned dan pepohon execStats.
// Find the 5 slowest operations in the last hour
db.system.profile.find({
ts: { $gt: new Date(Date.now() - 3600000) }
}).sort({ millis: -1 }).limit(5).pretty()Medan Utama dalam Dokumen Profil
Medan paling berguna untuk diagnosis dalam entri profil ialah: millis — jumlah masa berlalu. docsExamined — bilangan dokumen yang dibaca oleh MongoDB untuk memenuhi pertanyaan. keysExamined — entri indeks yang diimbas. nreturned — bilangan dokumen yang dikembalikan. Pertanyaan yang sihat mempunyai docsExamined / nreturned hampir kepada 1; nisbah 1000:1 mencadangkan indeks yang hilang atau tidak cekap.
// Inspect ratio of docsExamined to nreturned
db.system.profile.find({},{
millis: 1, docsExamined: 1, nreturned: 1, command: 1
}).sort({ millis: -1 }).limit(10)
// If docsExamined >> nreturned, you need a better indexAmbang slowms
slowms ialah had dalam milisaat untuk pemprofilan tahap 1. Hanya operasi yang mengambil masa lebih lama daripada nilai ini akan direkodkan. Nilai lalai ialah 100 ms; Anda boleh menurunkannya kepada 20–50 ms untuk menangkap lebih banyak operasi semasa penyiasatan, kemudian menaikkannya kembali kepada 100 ms (atau lebih tinggi) dalam produksi bagi mengurangkan overhed. Tetapan ini adalah bagi setiap pangkalan data dan tidak dikekalkan selepas dimulakan semula melainkan ditetapkan dalam mongod.conf.
// Set via mongod.conf (persists across restarts)
// operationProfiling:
// mode: slowOp
// slowOpThresholdMs: 100
// Or dynamically at runtime (applies until restart)
db.adminCommand({ profile: 1, slowms: 20 })Membaca Log Pertanyaan Perlahan
Walaupun pemprofil dimatikan, MongoDB menulis operasi perlahan ke dalam fail log. Setiap entri log pertanyaan perlahan mengandungi jenis operasi, ruang nama, tempoh, bentuk pertanyaan dan ringkasan pelan. Baris log dengan COLLSCAN dalam medan planSummary pasti tidak mempunyai indeks. Mesej log bermula dengan Slow query dan muncul pada tahap keterperincian log 0.
// In the mongod log (or Atlas Log viewer), look for lines like:
// 2025-01-15T10:23:45 COMMAND mydb.orders command: find { filter: { status: 'pending' } }
// planSummary: COLLSCAN
// keysExamined: 0 docsExamined: 150000 nreturned: 23
// protocol: op_msg 1250msPenasihat Prestasi Atlas
MongoDB Atlas menyertakan Penasihat Prestasi, yang menganalisis log pertanyaan perlahan Anda secara automatik dan mengesyorkan indeks. Ia mengumpulkan pertanyaan yang serupa mengikut bentuk pertanyaan (struktur penapis tanpa nilai), memaparkan purata masa pelaksanaan dan menjana perintah createIndex tepat yang Anda perlukan. Ini ialah cara terpantas untuk mengenal pasti indeks yang hilang dalam produksi tanpa menghuraikan log secara manual.
Membuat Pertanyaan pada system.profile dengan Berkesan
Anda boleh menapis system.profile mengikut jenis operasi, ruang nama atau mana-mana medan. Corak analisis biasa: cari semua imbasan koleksi, cari semua pengagregatan perlahan dan cari semua operasi pada koleksi tertentu. Isih mengikut millis secara menurun untuk melihat operasi yang paling bermasalah terlebih dahulu.
// Find all collection scans recorded by the profiler
db.system.profile.find({
'execStats.stage': 'COLLSCAN'
}).sort({ millis: -1 })
// Find slow ops on a specific collection
db.system.profile.find({
ns: 'mydb.orders',
millis: { $gt: 200 }
}).sort({ millis: -1 })Overhed Prestasi Pemprofil
Setiap entri profil ialah satu penulisan kepada koleksi terhad system.profile, yang menambahkan overhed kecil tetapi boleh diukur. Tahap 1 (operasi perlahan sahaja) selamat untuk kebanyakan beban kerja produksi. Tahap 2 (semua operasi) boleh meningkatkan kependaman sebanyak 5–20% pada kluster sibuk dan hanya patut dijalankan untuk sesi penyahpepijatan yang singkat. Sentiasa kembali kepada tahap 0 atau 1 selepas sesi pemprofilan.
// Check current profiling level and threshold
db.getProfilingStatus()
// { was: 1, slowms: 100, sampleRate: 1 }currentOp: Mengesan Pertanyaan Tidak Terkawal Secara Langsung
db.currentOp() memaparkan semua operasi yang sedang dilaksanakan pada pelayan — bukan hanya operasi perlahan yang telah selesai. Gunakannya untuk mengesan pertanyaan yang berjalan lama dalam masa nyata, mengenal pasti kunci, dan menghentikan operasi yang tidak terkawal dengan db.killOp(opid). Gabungkannya dengan pemprofil untuk mendapatkan gambaran lengkap tentang operasi perlahan yang lalu dan semasa.
// Find all ops running longer than 5 seconds
db.currentOp({
active: true,
secs_running: { $gt: 5 }
})
// Kill a specific runaway op by opid
db.killOp(12345)Aliran Kerja Pemprofilan: Siasat dan Baiki
Aliran kerja pemprofilan yang praktikal: 1) Tetapkan tahap pemprofilan 1 dengan ambang 50 milisaat. 2) Biarkan sistem berjalan selama 15–30 minit di bawah trafik sebenar. 3) Buat pertanyaan pada system.profile dan susun mengikut millis secara menurun. 4) Untuk setiap pertanyaan perlahan, jalankan explain('executionStats') pada pertanyaan yang sama. 5) Cipta indeks yang tiada. 6) Kembalikan pemprofil kepada ambang normal. Ulangi sehingga semua pertanyaan kritikal menggunakan indeks.
Semakan Pantas
Uji pemahaman anda tentang konsep MongoDB dan Pangkalan Data NoSQL daripada pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini, anda telah mempelajari bahawa: tahap pemprofilan 1 merekodkan operasi perlahan yang melebihi ambang slowms ke dalam system.profile, nisbah docsExamined/nreturned yang tinggi dan COLLSCAN dalam planSummary mengenal pasti indeks yang tiada, dan db.currentOp() membolehkan anda mengesan serta menghentikan pertanyaan yang berjalan lama dalam masa nyata. Seterusnya, kita akan meneroka prinsip ESR untuk mereka bentuk indeks gabungan yang optimum.
Pelajari JavaScript dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Pemprofil Pangkalan Data dan Log Pertanyaan Perlahan” percuma?
Ya — teks penuh “Pemprofil Pangkalan Data dan Log Pertanyaan Perlahan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus MongoDB Academy, tingkat taraf kepada CoddyKit PRO. Kursus MongoDB Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pemprofil Pangkalan Data dan Log Pertanyaan Perlahan”?
Pelajar akan mendayakan pemprofil, menetapkan ambang slowms dan membuat pertanyaan pada system.profile untuk mencari operasi yang paling mahal. Anda berlatih MongoDB Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan MongoDB Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran MongoDB Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Pemprofil Pangkalan Data dan Log Pertanyaan Perlahan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran MongoDB Academy ini?
Ya. Setiap pelajaran MongoDB Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pemprofil Pangkalan Data dan Log Pertanyaan Perlahan
- Peraturan Awalan Indeks Gubahan dan Prinsip ESR
- Persilangan Indeks berbanding Indeks Gubahan
- Petua Pengoptimuman Saluran Paip Agregasi