PostgreSQL / دليل حلول تحريري
تشخيص بطء الاستعلام والفهرسة والتقديرات
افصل العمل الزائد وخطأ التقدير والانتظار قبل فهرس أو إعداد، واحفظ دلالة النتيجة عند المقارنة.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
يبطؤ تقرير أو يُتجاهل فهرس أو يختلف الأداء بين العملاء. المسح التسلسلي والكلفة دليلان لا تشخيص كامل. سجل SQL والمعاملات والنتائج وتوزيع الزمن والإصدار وميز البارد عن المخبأ.
افهم الأسباب المحتملة
- تشمل الأسباب ضعف الانتقائية واختلاف التعبير والإحصاءات والترابط والخطط العامة وتنافس الموارد. يزيد الفهرس كلفة الكتابة. قد تسرع إزالة ربط أو صلاحية استعلاماً خاطئاً، فأثبت الصحة قبل الزمن.
التقط أساس مقارنة محدداً
اختر معاملات معتادة ومتطرفة بنسخة معزولة وتوزيع واقعي. أكد الصفوف وNULL والمستوى وسجل زمناً متكرراً بظروف متقاربة. اسأل هل العمل زائد أم ينتظر. لا تعد حركة إنتاج أو تختبر حمل خدمات معدة أو تطبق مفاتيح محسن عامة.
اقرأ الخطة التقديرية أولاً
تقدر EXPLAIN دون ANALYZE العبارة ولا تنفذ جلبها المعتاد. افحص الوصول وشروط الفهرس والتصفية والربط والأعداد والفرز. الكلفة ليست مللي ثانية، وقد يصح المسح الواسع رغم الفهرس. لا نختلق خطة لعينة غير معبأة. قارن تعبير العمود بالفهرس والمعامل.
EXPLAIN (FORMAT JSON)
SELECT shipment_id, created_at FROM quay_lab.shipments
WHERE customer_id = 7
ORDER BY created_at, shipment_id LIMIT 20;
افحص العدد والبنية ولا تعرض الكلفة زمناً مرصوداً.
استخدم تحليل التنفيذ بعينة معتمدة فقط
تقارن EXPLAIN (ANALYZE, BUFFERS) الصفوف والحلقات فعلياً على عينة قراءة معزولة، وتنّفذ العمل وتستهلك الموارد. لا تطبقها على التغيير عشوائياً. فسر متوسطات الحلقات والمدخلات المرفوضة. يدعو الاختلاف لفحص التوزيع والترابط ولا يثبت كفاية تحديث الإحصاء. تبقى الصيانة والفهرسة تغييرات مراجعة مستقلة.
افحص الانتظار قبل فرض الخطة
تكشف عينة النشاط الانتظار وعمر المعاملة بصلاحيات مناسبة، وافحص النص الحساس خصوصياً. إذا غلب الانتظار فعالج سببه المثبت، وإذا زاد العمل فاختبر فهرساً أو إعادة صياغة تحفظ المعنى. قد يبرر الترابط إحصاء ممتداً، وقد تضر خطة مفروضة من عينة بقية المعاملات.
SELECT pid, state, wait_event_type, wait_event, xact_start, query_start
FROM pg_stat_activity
WHERE datname = current_database() AND pid <> pg_backend_pid()
ORDER BY query_start NULLS LAST;
رصد فقط؛ طول الجلسة أو انتظارها دليل لا إذن إنهائها.
تحقق من نجاح الإصلاح
قارن النتائج والمعاملات ونسب الزمن والعمل وكلفة الكتابة قبل القبول. أكد الحالات المعتادة والمنحرفة واختبر تزامناً معتمداً؛ لا تكفي تجربة مخبأة. احفظ معيار الرجوع واشرح عنق الزجاجة المحلول.
امنع تكرار المشكلة
- راقب عائلات الاستعلام والنمو وصيانة البيانات وراجع الفهارس للحمل الكامل. وثق التعبيرات والشروط والأنواع والإحصاءات، وخصص work_mem للعمليات والتزامن بدلاً من رقم عام كبير.