PostgreSQL / المتقدم: الأدلة والتشغيل الموثوق / الدرس 13
تحليل الأداء وجودة التقديرات
شخص بطء تقرير الإرسال من العمل والتقديرات والانتظار، وغيّر الأداء بأدلة ممثلة لا إعدادات ذاكرة أو محسن عامة.
في هذه الصفحة
أهداف الدرس
- فصل ضعف الاستعلام وخطأ التقدير والتنافس.
- تقييم الإحصاءات والخطط وتجارب الحمل المحدودة.
حدد مشكلة المستخدم
سجل العبارة والمعاملات وعقد النتيجة وهدف الزمن. قد يملك عميل نصف الشحنات وآخر عشرين فتخفي المتوسطات الانحراف. قس الزمن والإنتاجية بتزامن ممثل لا تجربة مخبأة واحدة، وسجل الإصدار والحجم. قد يكون الاستعلام فعالاً وينتظر قفلاً أو تخزيناً؛ فقد النتائج ليس تحسيناً مقبولاً.
ابدأ بخطة لا تنفذ الاستعلام
تقدر EXPLAIN تقريراً تدريبياً للشحنات المعلقة حسب الوجهة. قارن الأعداد والمرشحات والربط بتوزيع معروف قبل تحليل التنفيذ. تفيد JSON للفحص الآلي ولا تحول التقدير إلى قياس. قد تفسر إحصاءات قديمة بعد الاستيراد خطة سيئة. لا تختلق الكلفة والزمن لعينة غير معبأة؛ يوضح المثال طريقة التشخيص وأسئلتها.
EXPLAIN (FORMAT JSON)
SELECT destination_id, COUNT(*) AS waiting
FROM quay_lab.shipments
WHERE state = 'pending' AND created_at < timestamptz '2026-10-20 00:00+00'
GROUP BY destination_id;
افحص التقديرات فقط؛ تحتاج الأعداد والأوقات عينة تنفيذ معزولة ممثلة.
قد تربك الحقائق المترابطة التقدير المستقل
تلخص إحصاءات العمود التوزيع وقد يرتبط warehouse_id وcity_id بقوة. تصف الإحصاءات الممتدة اعتماديات وتركيبات مختارة حيث يدعمها المحسن. اجمع الدليل قبل الإنشاء وتذكر أن جمع الإحصاء صيانة منفصلة. قد تناسب الخطة العامة المحضرة المتوسط وتضر قيمة شاذة؛ افحص معاملات ممثلة بدلاً من فرض وصول عام.
راقب الانتظار مع الخطط
يسرد الاستعلام جلسات القاعدة وانتظارها دون إلغاء. يحتاج wait_event تفسيراً مع الحالة والحدث، ولا تعني active استهلاك المعالج المستمر. تحتاج تفاصيل الآخرين ونصوصهم صلاحيات وقد تكون حساسة. اربط الأوقات بالتخزين والمعالج وطوابير التطبيق بدلاً من نسبة كل بطء للفهرسة.
SELECT pid, state, wait_event_type, wait_event, query_start,
clock_timestamp() - query_start AS query_age
FROM pg_stat_activity
WHERE datname = current_database() AND pid <> pg_backend_pid()
ORDER BY query_start NULLS LAST;
لو نفذها مشغل مصرح فهي رصد حي؛ لم تنفذ أثناء التأليف.
خصص الذاكرة والقياس بوعي
تستخدم عمليات الفرز والتجزئة work_mem منفردة وليست ميزانية الخادم كلها. تتضاعف العمليات والعمال والاتصالات وللتجزئة ضوابط أخرى. قد تسبب قيمة كبيرة ضغطاً رغم تحسن استعلام. تفيد pg_stat_statements عند تثبيتها وضبطها ولا نفترض وجودها. اقبل التغيير بعد فحص الصحة والزمن والكتابة والذاكرة والرجوع معاً.
الأخطاء الشائعة وإصلاحها
تُعرض كلفة المحسن كمللي ثانية
- لماذا يحدث؟
- اختلطت وحدات التقدير بالزمن.
- كيف تصلحه؟
- سم الكلفة واجمع الزمن منفصلاً.
- كيف تتجنب تكراره؟
- سجل الأمر وتعريف المقاييس مع المقارنة.
تسبب زيادة الذاكرة فشلاً عند الذروة
- لماذا يحدث؟
- قُللت تقديرات تخصيص العمليات المتزامنة.
- كيف تصلحه؟
- استخدم الرجوع المراجع ونمذج الطلب المتزامن الواقعي.
- كيف تتجنب تكراره؟
- اضبط الموارد من أدلة الحمل لا أرقام منسوخة.
تضر خطة مفروضة عملاء آخرين
- لماذا يحدث؟
- اختُصر توزيع منحرف إلى عينة واحدة.
- كيف تصلحه؟
- قارن فئات معاملات ممثلة وسلوك الخطط.
- كيف تتجنب تكراره؟
- ضمّن القيم المعتادة والمتطرفة في القبول.
اختبر فهمك
1. يتحول الاستعلام من 20 ms منفرداً إلى 2 s بالذروة مع عمل مشابه. ماذا تفحص؟
اعرض الحل المشروح
افحص الانتظار والطوابير وتشبع الموارد بأوقات مطابقة. يطول العمل نفسه عند تنافس التخزين والمعالج والأقفال. مثل التزامن في بيئة معزولة قبل الإعداد العام؛ لا يثبت اقتراح فهرس أن المشكلة بنية وصول.
2. يخطئ التقدير فقط عند جمع المستودع والمدينة. لماذا تدرس الإحصاء الممتد؟
اعرض الحل المشروح
قد يرتبط العمودان فيخطئ ضرب انتقائيتين مستقلتين. أثبت الترابط وأنواع الإحصاء المدعومة ثم اختبر كائناً وANALYZE مراجعَين على نسخة. لا تدع إصلاح كل تقدير ربط أو ضمان خطة.
أهم ما تعلمته
- تحتاج جودة الخطة والتنافس أدلة مختلفة.
- قس التوزيع والتزامن قبل تغيير الموارد العامة.