يضيف الفريق فهرساً أو يغير شرطاً في استعلام، ثم يلاحظ أن قاعدة الاختبار اختارت مساراً مختلفاً. لقطة EXPLAIN طويلة، ومقارنتها يدوياً بين إصدارات المشروع ليست سهلة. تستطيع مشاريع تخرج قواعد البيانات بناء أداة تحفظ شجرة الخطة لسيناريو ثابت، وتبرز العقد التي تغيرت وتقديرات الصفوف التي اختلفت. لكنها لا تقول إن خطة بعينها أسرع لمجرد أنها أقصر أو تستخدم فهرساً؛ القرار يحتاج بيانات وقياساً مضبوطاً.

ثبت المحرك والاستعلام والبيانات

ابدأ بمحرك واحد وإصدار محدد واستعلامين أو ثلاثة لهما نتيجة متوقعة. استخدم مجموعة بيانات اصطناعية مولدة ببذرة ثابتة، واحفظ حجمها وتوزيع القيم والفهارس وإعدادات المحرك. قد تتغير الخطة مع الإحصاءات أو عدد الصفوف، لذلك لا تقارن ملفين مجهولي البيئة. وثائق PostgreSQL EXPLAIN تشرح شكل الخطة وتقديرات الكلفة والصفوف، ويشرح دليل SQLite للتخطيط كيف يستخدم المحرك الفهارس في البحث والترتيب. هذه السلوكيات تختلف بين المحركات؛ اختر محركاً واحداً قبل بناء المقارن.

حوّل الشجرة إلى عقد قابلة للمقارنة

اقرأ output بصيغته الآلية إن دعمها المحرك، واحتفظ بنسخة أصلية للرجوع إليها. مثل كل عقدة بنوع العملية، والجدول، وشرط الفلترة، والعقد الأبناء، والأعداد المقدرة. لا ترتب الأبناء أبجدياً إن كان ترتيبهم يشرح تنفيذ العملية. عند المقارنة، اعرض مثلاً أن Index Scan تحولت إلى Sequential Scan، أو أن نوع join اختلف، مع حقول تغيرت في فرع الخطة.

حاول إزالة القيم المتغيرة غير الدلالية مثل أوقات التنفيذ إذا كان هدف النسخة مقارنة البنية فقط. لا تزل رقم إصدار المحرك أو إعداداته؛ ضعها في رأس التقرير. إذا لم يفهم المحلل عقدة جديدة، اعرضها كما جاءت ووسمها «غير محللة». حفظ النص الخام يتيح مراجعة النتيجة حتى عندما تتغير صيغة JSON بين إصدارات.

مثال استعلام يتغير مع البيانات

لنفترض استعلاماً يعرض سجلات قسم واحد مرتبة حسب التاريخ. النسخة الأولى من القاعدة فيها عشرات الصفوف، والنسخة الثانية فيها آلاف. احفظ plan قبل التغيير وبعد إضافة فهرس على القسم والتاريخ. قد يختار المحرك قراءة الجدول كاملاً في الحالة الصغيرة، ويستخدم فهرساً حين تصبح الكلفة المقدرة أقل في الحالة الكبيرة. يجب أن تعرض الأداة حجم fixture وتقديرات الخطة، لا أن تفسر الاختيار على أنه عطل أو تحسين تلقائي.

أضف تغييراً في كتابة الاستعلام يفرض cast على العمود، وراقب هل اختفى استخدام الفهرس في هذه البيانات. قارِن النتائج نفسها لتتأكد من بقاء النتيجة صحيحة، ثم قس التنفيذ في بيئة محلية مضبوطة بصورة منفصلة. لا تخلط زمن EXPLAIN بمقياس الطلب من التطبيق، ولا تصنع أرقاماً ثابتة في المقال. المثال يوضح سؤالاً للتجربة ولا يصف اختباراً أجرته Uni2Career.

اعرض حدود التقدير والقياس

لخطة PostgreSQL، قد يسجل المختبر actual rows ووقت التنفيذ إذا شغل EXPLAIN ANALYZE، لكن ذلك ينفذ الاستعلام فعلياً وقد يشغل آثاراً جانبية عند استعلامات الكتابة. استخدم SELECT على قاعدة معزولة ولا تنفذ تغييرات على قاعدة إنتاج. فصل الشجرة المقدرة عن الشجرة المقاسة يجعل القارئ يعرف أي واحدة أمامه. لا تستخدم خياراً ينفذ SQL تلقائياً على ملفات غير موثوقة.

إذا كانت الإحصاءات قديمة، أو كانت البيانات مصطنعة بتوزيع غير واقعي، فقد لا تشبه الخطة بيئة أخرى. ضع هذه المعلومة بجوار المقارنة. لا تقارن الكلفة العددية بين محركين مختلفين بوصفها وحدة مشتركة؛ الكلفة تقدير داخلي للمحرك. المخرجات المفيدة هي تفسير اختلاف الخطة ضمن إعدادين مسجلين، لا لوحة ترتيب عامة لقواعد البيانات.

تحقق من صحة المقارنة

أنشئ fixtures لجدول صغير وكبير، مع فهرس وبدونه، وإحصاءات محدثة وقديمة. اختبر استعلاماً تستخدم خطته صفياً ثم يتغير مساره عند زيادة عدد العناصر، واستعلاماً تبقى بنيته ثابتة. قارِن نتيجة الاستعلام نفسها بين النسختين. يجب أن يرى المستخدم عقداً مضافة أو محذوفة ومصدرها، وأن تعرف الأداة أن اختلاف الإصدار قد يغير تمثيل الخطة.

كخط أساس، اطلب من طالب مراجعة ملفي EXPLAIN الخام وكتابة التغيرات يدوياً، ثم قارنها بتقرير المقارن. اختبر fixture غير معروفاً كي يبين المحلل حدود فهمه. لا تستنتج جودة الفهرس من عقدة واحدة، ولا تجعل التطبيق يوصي بحذف index من دون قراءة workloads أوسع.

التسليم والحدود

تتكون النسخة الأولى من runner على قاعدة محلية، مولد بيانات، قارئ output لمخطط واحد، وعارض فرق يحفظ الإعدادات والملفات الخام. أرفق استعلامات ونتائج متوقعة، وتقريراً يذكر المحرك والإصدار وعدد الصفوف. يمكن تنفيذها ضمن مشاريع التخرج المرتبطة بقواعد البيانات أو خدمة قواعد البيانات وواجهات البرمجة. الأداة لا تختار خطة مثلى لكل مؤسسة ولا تعد بنتيجة زمنية؛ هي تقلل جهد قراءة تغير الخطة وتوجه المراجعة إلى عقد وأرقام تستحق الفحص.

المصادر

مراجعة المصادر: .

اختبار المثال وحدوده

خطط الاستعلام في الأمثلة توضيحية؛ لا تمثل قياساً لمحرك قاعدة بيانات على بيانات مستخدمين.

مقالات ذات صلة

الخدمة المرتبطة: تطوير قواعد البيانات وواجهات البرمجة.

أرسل متطلبات مشروعك