جرّب خدماتنا مجانًا - سنقوم بإصلاح أصعب مشكلة في متجرك خلال 24 ساعة!

دراسة حالة: كيف خفضنا زمن تحميل صفحات التصنيفات في متجر ماجنتو 2 ‎55٪ عبر تحسين قاعدة البيانات فقط

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

في دراسة الحالة هذه سنتعرف على خطوات تحسين سرعة صفحات التصنيفات في ماجنتو 2، مع أمثلة عملية على الخطوات التي قمنا بتنفيذها من أجل ضمان خفض زمن تحميل صفحات التصنيفات.

مع ضرورة الملاحظة أنه في غالبية الحالات بكون السبب هو بطئ استعلامات SQL بسبب عدم ملائمتها لقواعد كتابة الإستعلامات السليمة، أو من الممكن أن يكون السبب هو اعتماد إعدادات MySQL/MariaDB الإفتراضية والتي لا تناسب حجم البيانات الموجودة على المتجر.


التحديات التي واجهناها

التحدي/عامل الخطرالنتيجة قبل التحسين
زمن تحميل صفحة التصنيف (LCP)3.6 ثانية
استهلاك MySQL للمعالج CPU (في اوقات الذروة)90٪
استعلامات بطيئة (بوقت تنفيذ أكبر من 2 ثانية)1,450 يومياً
اقتراح الشركة التقنية السابقةترقية الخادم من t3.medium إلى t3.large

خطوات تحسين سرعة صفحات التصنيفات في ماجنتو 2

الخطوةالحلالأثر المباشر للحل
تسجيل الاستعلاماتتفعيل تخزين استعلامات قواعد البيانات من خلال تعيين debug true في ملف ‎env.php؛ بحيث يتم حفظ سجل الإستعلامات في var/debug/db.logبعد التفعيل تم الكشف عن 17 استعلامًا بوقت تنفيذ يتجاوز ‎3 ثوان للإستعلام الواحد.
تحليل & EXPLAINEXPLAIN + ملف slow query logتم تحديد استعلام الربط في جدول catalog_category_product_index كأبطأ استعلام SQL
إضافة فهارس مركّبةSQL ALTER TABLE catalog_category_product_index ADD INDEX idx_cat_pos (category_id, position);تم خفض وقت الاستعلام الرئيسي ‎62٪ مباشرة بعد إضافة الفهارس.
ضبط InnoDBتحديث الإعدادات وتعيين ‎innodb_buffer_pool_size‎ إلى ‎60٪ من استهلاك الذاكرة RAMقلّ استخدام I/O العشوائي 35٪
تهيئة المعاملاتinnodb_flush_log_at_trx_commit = 2, innodb_buffer_pool_instances = 4, إيقاف Query Cache (مستحسن لماجنتو 2)قلّ زمن الـ COMMIT والتجزيء
إعادة جدولة الـIndexersتغيير وضع الفهرسة إلى”On Save” للفئات الضخمة، وجدولة فهرسة الساعة 3 فجراً من كل يوم لتجنب التعارضات بين الفهرسة عند الحفظ والفهرسة المجدولة.اختفت قمم CPU أثناء ساعات الذروة بشكل شبه كُلي.
تركيب وضبط المراقبة الآليةتم استخدام New Relic مع تنبيهات مباشرة لموظفينا في حال تجاوز استهلاك المعالج CPU قيمة 70٪ أو أكثر.سنتمكن بهذه الطريقة من معالجة إية استعلامات أو أخطاء مؤثرة بشكل مباشر على استهلاك الموارد.

النتيجة بالأرقام

المؤشرقبلبعد
LCP صفحات التصنيفات3.6 ث1.6 ث (-55 ٪)
TTFB المتوسّط920 مللي ثانية410 م ث (-55 ٪)
استعلامات بطيئة / يوم1,450310 (-79 ٪)
استهلاك CPU MySQL (وقت الذروة)90٪63٪ (-30 ٪)

لماذا يجب عليك تطبيق هذه التحسينات؟

  1. زيادة معدل التحويل — كل ثانية تأخير بعد الثلاث الأولى تُخفض معدل الشراء ‎7٪.
  2. تأجيل ترقية السيرفر — تخفيض استهلاك الموارد في أوقات الذروة يمنع إنفاق مئات الدولارات سنويًّا على موارد لا حاجة لها.
  3. أمان واستقرار أعلى — استعلامات أقصر تعني فرصًا أقل لقفل الجداول Lock وظهور أخطاء 500 internal server error في أوقات الذروة.
  4. تحسين السيو SEO — كلما تحسنت سرعات LCP وTTFB سيكون لديك فرصة أفضل لرفع ترتيب صفحات متجرك في نتائج Google SERP.

خطوات قابلة للتطبيق في متجرك

  1. فعّل تسجيل الاستعلامات ثم تفقد var/debug/db.log.
  2. استخدم EXPLAIN على أبطئ 10 استعلامات؛ أضف الفهارس أو أعد كتابة أكواد JOIN.
  3. قم بضبط ‎innodb_buffer_pool_size‎ ثم أعد تشغيل خدمة MySQL/MariaDB.
  4. راجع جدول catalogsearch_fulltext؛ إذا تخطى 5 GB فكر بتقسيم الجدول أو استخدام Elasticsearch محسن مع إعداد Heap=50٪.
  5. راقب مؤشرات الأداء كل أسبوع، ولا تفعل أي فهارس جديدة في أوقات الذروة.

الخلاصة

تحسين قاعدة البيانات واستعلاماتها في ماجنتو 2 لا يتطلب ترقية الخادم -السيرفر-؛ بل يبدأ بتسجيل الاستعلامات، تحليلها، وضبط InnoDB بذكاء.

خلال سبعة أيام فقط مع المتابعة والمراقبة، خفضنا زمن تحميل صفحات التصنيفات ‎55٪، وخفضنا الضغط على المعالج 30٪، ووفرنا على العميل تكلفة ترقية السيرفر، ويمكنك تكرار هذه الحلول في أي متجر يعمل على ماجنتو 2.

والآن… هل ترغب في متجر يعمل بلا أعطال تقنية وبأفضل أداء؟ [تصفح باقات الدعم الفني والصيانة للمتاجر الإلكترونية]

دراسات حالة قد يهمك الإطلاع عليها