الدورات
title
هل تعاني من بطء في قاعدة البيانات؟

هل تعاني من بطء في قاعدة البيانات؟
عندما يواجه معظم المطورين أو مسؤولي قواعد البيانات مشكلة في الأداء، يتجه التفكير مباشرة نحو حلول مثل:
- زيادة الذاكرة (RAM)
- إضافة فهارس (Indexes)
- إعادة كتابة الاستعلامات (Queries)
لكن قبل تنفيذ أي من هذه الحلول، يجب أن نتوقف ونسأل: ما الذي يحدث فعلاً داخل قاعدة البيانات؟
أفضل نقطة بداية: تفعيل خاصية Slow Query Log
في قواعد بيانات MySQL وMariaDB توجد خاصية تسمى Slow Query Log، وظيفتها تسجيل أي استعلام يتجاوز وقت تنفيذ معين (مثل ثانية واحدة).
عند تفعيل هذه الخاصية، ستكتشف وجود استعلامات بطيئة لم تكن تتوقعها.
أمثلة لمشاكل شائعة تظهر عند تحليل Slow Query Log:
- استعلام بسيط مثل:
SELECT * FROM sessions
، يستهلك وقتاً طويلاً لأن الجدول يحتوي على ملايين السجلات بدون فهرسة. - استخدام دوال داخل شرط WHERE مثل:
WHERE LOWER(email) = 'test@example.com'
يمنع قاعدة البيانات من استخدام الفهرس. - استعلام يتم تنفيذه آلاف المرات في الساعة، مكتوب بسطر واحد داخل الكود لكنه يستهلك موارد السيرفر بشكل كبير.
- عمليات JOIN بدون شروط دقيقة تربط ملايين السجلات بشكل غير مقصود.
المشكلة ليست دائماً في استعلام واحد
كثيراً ما تكون المشكلة الحقيقية في استعلام بسيط يتكرر آلاف المرات، مما يسبب ضغطاً كبيراً على قاعدة البيانات.
أداة pt-query-digest لتحليل استعلامات Slow Query Log
تقوم أداة pt-query-digest بتحليل ملف الاستعلامات البطيئة وتُعطيك تقارير عن:
- أكثر الاستعلامات تكراراً
- عدد مرات تنفيذ كل استعلام
- متوسط زمن التنفيذ لكل استعلام
- التأثير الكلي لكل استعلام على النظام
في PostgreSQL يمكن استخدام pg_stat_statements
توفر هذه الأداة نفس التحليلات تقريباً من داخل قاعدة البيانات مباشرة دون الحاجة لملفات خارجية.
إحصائيات الجداول (Statistics) وتأثيرها على خطة التنفيذ
في بعض الحالات، لا تختار قاعدة البيانات أفضل خطة تنفيذ للاستعلامات بسبب قِدم إحصائيات الجداول.
قد يصبح استعلام كان سريعاً بطيئاً فجأة، ليس لأنه تغير، بل لأن قاعدة البيانات تعتمد على بيانات قديمة تعتقد أن الجدول صغير.
الحل هو تحديث الإحصائيات بشكل دوري باستخدام أمر ANALYZE.
الاستعلامات التي تختلف سرعتها حسب البيانات (Parameter-Sensitive Plans)
بعض الاستعلامات قد تعمل بسرعة أحياناً وببطء أحياناً أخرى بناءً على حجم البيانات المدخلة في كل طلب.
Slow Query Log يساعدك في ملاحظة هذا التفاوت وتحليل أسبابه.
تفعيل Slow Query Log ليس رفاهية، بل ضرورة لفهم أداء قاعدة البيانات
ابدأ بتفعيل هذه الخاصية، وقم بتحليل النتائج بطرق علمية، واجعل كل تعديل أو تحسين تقوم به مبنياً على ملاحظات حقيقية ودقيقة.