MariaDB / المتقدم: الأدلة والتشغيل الموثوق / الدرس 13
أدلة المحسن وأداء حمل العمل
شخص بطء تقرير الإرسال بالفصل بين أخطاء التقدير والعمل المنفذ وتنافس الموارد، واستخدم أدوات MariaDB بحدود تشغيلية واضحة.
في هذه الصفحة
أهداف الدرس
- مقارنة العمل المقدر والمرصود دون مبالغة زمنية.
- اختيار تعديل الاستعلام أو الإحصاءات أو الحمل وفق الدليل.
حدد أساس مقارنة مفيداً
قد يبطؤ تقرير الإرسال لأنه يفحص صفوفاً كثيرة أو ينتظر قفلاً أو يتنافس مع النسخ على التخزين. ابدأ بالنص والمعاملات والإصدار والأحجام وهدف زمن المستخدم. سجل نسباً مئوية لقياسات متكررة لا تجربة سريعة واحدة. تختلف البيانات المخبأة عن الباردة وقد تخفي عينة عميل واحد انحراف التوزيع. حافظ على عقد النتيجة؛ فالسرعة مع فقد صفوف ليست تحسناً.
اقرأ التقديرات قبل تحليل التنفيذ
توفر EXPLAIN FORMAT=JSON خطة تقديرية منظمة للعينة. افحص الوصول وترتيب الربط وانتقائية التصفية وقارن الشروط بتوزيع البيانات المعروف. تختلف حقول MariaDB عن MySQL، لذا استخدم تفسيراً مناسباً. قد يضلل متوسط عدد القيم إذا امتلك عميل نصف الجدول. لا يزعم المثال أرقام خطة لأننا لم نقسها هنا.
EXPLAIN FORMAT=JSON
SELECT customer_id, COUNT(*) AS waiting
FROM shipments
WHERE state = 'pending' AND created_at < '2026-10-20'
GROUP BY customer_id;
يقدر هذا تقرير قراءة ويحتاج عينة ممثلة، ولا يدعي اختيار فهرس معين.
افصل القياس عن الصيانة
تنفذ ANALYZE FORMAT=JSON SELECT التقرير وتضيف معلومات وقت التنفيذ. قارن التقديرات بـ r_rows والحلقات في العقد مع فهم تعريف المقاييس. يدعو الاختلاف الكبير لفحص التوزيع والإحصاءات ولا يثبت تلقائياً أن تحديثها يحل البطء. تحدث ANALYZE TABLE الإحصاءات وقد تستهلك الموارد وتغير الخطط؛ عاملها كتغيير مراجع لا خطوة خفية في تشخيص قراءة.
قِس SELECT محددة داخل المختبر فقط
توضح العبارة تحليل التنفيذ في MariaDB وهي غير قابلة للتشغيل هنا. استخدمها بعد تقدير العمل في عينة معزولة ممثلة؛ فقد تمسح وتجمع صفوفاً كثيرة. تعيد تحليلاً بدلاً من جدول النتيجة العادي. تقارن التجربة المفيدة البيانات والمعاملات وإعدادات الجلسة نفسها وتتحقق من الصحة قبل فهرس أو إعادة صياغة وبعدها. قد يشرح أثر المحسن البدائل المرفوضة ويُستخدم داخل جلسة تشخيص مقصودة.
ANALYZE FORMAT=JSON
SELECT customer_id, COUNT(*) AS waiting
FROM shipments
WHERE state = 'pending' AND created_at < '2026-10-20'
GROUP BY customer_id;
بخلاف EXPLAIN تنفذ MariaDB هذا SELECT فعلاً، ولا نقدم قياسات مرصودة.
حسن المورد الذي يقيد العمل
إذا كان العمل الفعلي مفرطاً، قلل الربط غير اللازم أو استخدم وصولاً انتقائياً أو ملخصاً مصاناً بعناية. وإذا كان العمل معقولاً والزمن يزداد مع التزامن، افحص انتظار الأقفال وضغط الذاكرة والتخزين والاتصالات. تكشف سجلات البطء التواتر والصفوف وقد تحتوي قيماً حساسة تحتاج احتفاظاً منضبطاً. لا تزد كل المخازن العامة؛ تتضاعف التخصيصات لكل اتصال. اقبل التعديل وفق الزمن والإنتاجية والصحة والكلفة معاً.
الأخطاء الشائعة وإصلاحها
يعيد الاستعلام الأسرع سجلات تجارية أقل
- لماذا يحدث؟
- غيرت إعادة الصياغة معنى NULL أو الربط أو حدود التاريخ.
- كيف تصلحه؟
- قارن المفاتيح والمجاميع بعينات الحدود قبل قبول الزمن.
- كيف تتجنب تكراره؟
- اجعل تكافؤ المعنى شرط قبول صريحاً للتحسين.
تسبب زيادة الذاكرة العامة ضغطاً
- لماذا يحدث؟
- قُللت تقديرات التخصيصات لكل جلسة أو عند التزامن.
- كيف تصلحه؟
- اعكس التغيير المراجع ونمذج ذروة الذاكرة المتزامنة.
- كيف تتجنب تكراره؟
- حسن وفق حدود الموارد المقاسة مع خطة رجوع.
تُفترض ANALYZE فحصاً سلبياً
- لماذا يحدث؟
- اختلط تحليل التنفيذ بـ EXPLAIN أو صيانة الإحصاءات.
- كيف تصلحه؟
- حدد الأمر كاملاً وقيم أثر تنفيذه.
- كيف تتجنب تكراره؟
- ميز التشخيص بحسب التنفيذ أو تعديل البيانات الوصفية أو التقدير.
اختبر فهمك
1. التقدير 100 صف والمتوسط المرصود 20000 لعقدة ربط. ماذا تفحص قبل فرض فهرس؟
اعرض الحل المشروح
افحص انحراف التوزيع وتمثيل المعاملات وتحويل الشروط وحداثة الإحصاءات ونوعها. حدد هل r_rows لكل حلقة وعدد الحلقات قبل مقارنة العمل الكلي. اختبر تغييراً مبرراً في مختبر ممثل. قد يثبت فرض الفهرس خياراً سيئاً لعميل أو إصدار آخر.
2. يستغرق الاستعلام 20 مللي ثانية منفرداً وثانيتين عند الذروة مع صفوف مفحوصة متشابهة. ماذا يرجح؟
اعرض الحل المشروح
افحص التنافس والانتظار بدلاً من افتراض زيادة المسح. اربط انتظار الأقفال والاتصالات والمعالج وزمن التخزين بالطوابع نفسها. قد يطول العمل المنطقي ذاته عند التشبع. أعد إنتاج التزامن الممثل وقيم حدود الاتصالات والجدولة إلى جانب تحسين الاستعلام.
أهم ما تعلمته
- التقدير والعمل المقاس والزمن أدلة مترابطة ومختلفة.
- حسن قيد الحمل مع الحفاظ على عقد النتيجة.