محلّل قاعدة البيانات وسجل الاستعلامات البطيئة
سيمكّن المتعلمون المحلّل، ويضبطون حد slowms، ويستعلمون system.profile للعثور على العمليات الأعلى كلفة.
محلّل قاعدة البيانات وسجل الاستعلامات البطيئة درس مجاني في MongoDB Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في MongoDB Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة MongoDB Academy 4 دروس في المجموع.
أهمية تحديد الملفات التعريفية
يمكن لـ MongoDB تشغيل آلاف الاستعلامات في الثانية، لكن عددًا قليلًا من الاستعلامات البطيئة قد يبطئ التطبيق بأكمله. يُعد ملف تعريف قاعدة البيانات وسجل الاستعلامات البطيئة أداتيك الأساسيتين للعثور على هذه العمليات المكلفة. فهما يسجلان تفاصيل تنفيذ الاستعلام، مثل المدة وعدد المستندات المفحوصة واستخدام الفهارس، لكي تتمكن من تحديد الاختناقات وإصلاحها قبل أن يلاحظها المستخدمون.
مستويات ملف التعريف: 0 و1 و2
يتضمن ملف التعريف ثلاثة مستويات: المستوى 0 — متوقف، ولا يُسجَّل أي شيء. المستوى 1 — يسجّل العمليات التي تستغرق وقتًا أطول من حد slowms (الافتراضي 100 مللي ثانية). وهذا هو الإعداد الموصى به في بيئات الإنتاج. المستوى 2 — يسجّل كل عملية بغض النظر عن مدتها. ويفيد المستوى 2 أثناء تصحيح الأخطاء، لكنه ينشئ عبئًا كبيرًا على الكتابة عند استخدامه المستمر في بيئات الإنتاج.
// 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)مجموعة system.profile
تُكتب العمليات التي يلتقطها ملف التعريف في المجموعة المحدودة system.profile داخل كل قاعدة بيانات. ويمثل كل مستند في هذه المجموعة عملية واحدة، ويحتوي على: op (نوع العملية)، وns (مساحة الأسماء)، وcommand (الاستعلام أو التحديث)، وmillis (المدة)، وkeysExamined، وdocsExamined، وnreturned، وشجرة 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()الحقول الأساسية في مستند ملف التعريف
أكثر الحقول فائدةً لتشخيص إدخال ملف التعريف هي: millis — إجمالي الوقت المنقضي. docsExamined — عدد المستندات التي قرأتها MongoDB لتلبية الاستعلام. keysExamined — إدخالات الفهرس التي جرى فحصها. nreturned — عدد المستندات التي أُعيدت. يكون الاستعلام السليم ذا قيمة docsExamined / nreturned قريبة من 1؛ أما النسبة 1000:1 فتشير إلى فهرس مفقود أو غير فعّال.
// 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 indexحد slowms
يمثل slowms الحد الفاصل، بالمللي ثانية، للتسجيل في المستوى 1 من ملف التعريف. ولا تُسجَّل إلا العمليات التي تستغرق وقتًا أطول من هذه القيمة. القيمة الافتراضية هي 100 مللي ثانية؛ ويمكنك خفضها إلى 20–50 مللي ثانية لالتقاط مزيد من العمليات أثناء التحقيق، ثم إعادتها إلى 100 مللي ثانية (أو أعلى) في بيئة الإنتاج لتقليل العبء. ويُطبَّق الإعداد لكل قاعدة بيانات، ولا يستمر بعد إعادة التشغيل ما لم يُضبط في 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 })قراءة سجل الاستعلامات البطيئة
حتى عند إيقاف ملف التعريف، تكتب MongoDB العمليات البطيئة في ملف السجل الخاص بها. ويتضمن كل إدخال في سجل الاستعلامات البطيئة نوع العملية، ومساحة الأسماء، والمدة، وبنية الاستعلام، وملخص الخطة. وتكون أسطر السجل التي تحتوي على COLLSCAN في الحقل planSummary مؤكدةً لغياب فهرس. وتبدأ رسائل السجل بالعبارة Slow query وتظهر عند مستوى الإسهاب 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 1250msPerformance Advisor في Atlas
يتضمن MongoDB Atlas أداة Performance Advisor التي تحلل سجلات الاستعلامات البطيئة تلقائيًا وتوصي بالفهارس. وهي تجمع الاستعلامات المتشابهة حسب بنية الاستعلام (بنية عوامل التصفية من دون القيم)، وتعرض متوسط وقت التنفيذ، وتنشئ أمر createIndex الدقيق الذي تحتاج إليه. وتُعد أسرع طريقة لتحديد الفهارس المفقودة في بيئة الإنتاج من دون تحليل السجلات يدويًا.
الاستعلام من system.profile بفاعلية
يمكنك تصفية system.profile حسب نوع العملية أو مساحة الأسماء أو أي حقل. ومن أنماط التحليل الشائعة: العثور على جميع عمليات الفحص الكامل للمجموعات، والعثور على جميع عمليات التجميع البطيئة، والعثور على جميع العمليات التي تُجرى على مجموعة محددة. رتّب حسب millis ترتيبًا تنازليًا لرؤية أسوأ العمليات أولًا.
// 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 })عبء أداء ملف التعريف
يمثل كل إدخال في ملف التعريف عملية كتابة إلى المجموعة المحدودة system.profile، ما يضيف عبئًا صغيرًا لكنه قابلًا للقياس. ويُعد المستوى 1 (العمليات البطيئة فقط) آمنًا لمعظم أحمال العمل في بيئات الإنتاج. أما المستوى 2 (جميع العمليات)، فقد يزيد زمن الاستجابة بنسبة 5–20% في المجموعات المشغولة، ولا ينبغي تشغيله إلا لجلسات قصيرة لتصحيح الأخطاء. أعد دائمًا المستوى إلى 0 أو 1 بعد انتهاء جلسة تحديد الملفات التعريفية.
// Check current profiling level and threshold
db.getProfilingStatus()
// { was: 1, slowms: 100, sampleRate: 1 }currentOp: التقاط الاستعلامات الجامحة مباشرةً
تعرض db.currentOp() جميع العمليات التي يجري تنفيذها حاليًا على الخادم، وليس العمليات البطيئة التي اكتمل تنفيذها فقط. استخدمها لاكتشاف الاستعلامات طويلة التشغيل في الوقت الفعلي، وتحديد عمليات القفل، وإنهاء العمليات الخارجة عن السيطرة باستخدام db.killOp(opid). ادمجها مع أداة التحليل للحصول على صورة كاملة للعمليات البطيئة السابقة والحالية.
// 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)سير عمل التحليل: التحقيق والإصلاح
إليك سير عمل عمليًا للتحليل: 1) اضبط مستوى التحليل على 1 مع حد زمني قدره 50 مللي ثانية. 2) اترك النظام يعمل لمدة تتراوح بين 15 و30 دقيقة تحت حركة مرور فعلية. 3) نفّذ استعلامًا على system.profile مع الترتيب تنازليًا حسب millis. 4) لكل استعلام بطيء، شغّل explain('executionStats') على الاستعلام نفسه. 5) أنشئ الفهرس المفقود. 6) أعد أداة التحليل إلى الحد الزمني المعتاد. كرّر ذلك حتى تستخدم جميع الاستعلامات المهمة الفهارس.
تحقق سريع
اختبر مدى فهمك لمفاهيم MongoDB وقواعد بيانات NoSQL الواردة في هذا الدرس.
مراجعة الدرس
تعلّمت في هذا الدرس أن مستوى التحليل 1 يسجّل العمليات البطيئة التي تتجاوز حد slowms في system.profile، وأن ارتفاع نسبتي docsExamined/nreturned وظهور COLLSCAN في planSummary يشيران إلى فهارس مفقودة، وأن db.currentOp() تتيح لك اكتشاف الاستعلامات طويلة التشغيل وإنهاءها في الوقت الفعلي. بعد ذلك، سنتناول مبدأ ESR لتصميم الفهارس المركبة المثلى.
تعلم JavaScript مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «محلّل قاعدة البيانات وسجل الاستعلامات البطيئة» مجاني؟
نعم — نص درس «محلّل قاعدة البيانات وسجل الاستعلامات البطيئة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة MongoDB Academy، انتقل إلى CoddyKit PRO. تتضمن دورة MongoDB Academy 4 دروس في المجموع.
ماذا ستتعلم في «محلّل قاعدة البيانات وسجل الاستعلامات البطيئة»؟
سيمكّن المتعلمون المحلّل، ويضبطون حد slowms، ويستعلمون system.profile للعثور على العمليات الأعلى كلفة. تتمرن على MongoDB Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ MongoDB Academy؟
لا تُشترط خبرة سابقة. MongoDB Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «محلّل قاعدة البيانات وسجل الاستعلامات البطيئة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس MongoDB Academy هذا؟
نعم. كل درس في MongoDB Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- محلّل قاعدة البيانات وسجل الاستعلامات البطيئة
- قاعدة بادئة الفهرس المركب ومبدأ ESR
- تقاطع الفهارس مقابل الفهارس المركبة
- نصائح لتحسين مسار التجميع