تواصل معي أحد العملاء شاكيًا من بطء شديد في متجره الإلكتروني المبني باستخدام ووكومرس، إذ كان المحتوى يحتاج أكثر من 9 ثوانٍ حتى يظهر في الصفحة الرئيسية، وهذا البطء أثر سلبًا على تجربة المستخدم بشكل كبير، ورفع معدل الارتداد إلى مستويات قياسية.
وبعد تفحص المتجر بشكل دقيق، توصلت إلى أن المشكلة الأساسية كانت في قاعدة البيانات، فقد احتوت كمية كبيرة من السجلات غير الضرورية والتي أبطأت الاستعلامات بشدة، وبعد تجريب عدد من إضافات تنظيف قواعد البيانات التي لم ينفع أي منها، اتخذت القرار بتنظيف قاعدة البيانات يدويًا.
لكن ما هي الأسباب التي تتطلب تنظيف قاعدة البيانات يدويًا بدلًا من الاعتماد على الإضافات، وكيف يمكن تنظيفها دون التأثير على عمل الموقع؟ أشارككم في هذا المقال تجربتي التي تجيب عن هذين السؤالين بشكل مفصّل ودقيق.
التوصل إلى سبب المشكلة
كما هو معروف في مجال تحسين أداء المواقع، هناك عوامل معينة تؤثر على سرعة الموقع، مثل حجم الصور، ونوع الاستضافة ومواردها، والتخزين المؤقت، وكفاءة القالب والإضافات، ولهذا بدأت بتفحص هذه العوامل.
لكن الغريب أن موقع عميلي كان يتبع بالفعل أفضل الممارسات المعروفة لتحسين السرعة، فقد استخدم نظام تخزين مؤقت فعال يعتمد على LiteSpeed Cache، وأداة لضغط الصور مع المحافظة على جودتها، إضافة إلى استضافة توفر موارد كافية، وقالب وإضافات مختارة بعناية لا تؤثر على الأداء.
وهذا دفعني إلى تفحص قاعدة البيانات باستخدام phpMyAdmin، وهنا اكتشفت الكارثة، حيث بلغ عدد السجلات المتراكمة في بعض الجداول مثل wp_actionscheduler_actions و wp_actionscheduler_logs و wp_postmeta عشرات الآلاف، وهذا أكد لي أن المشكلة تكمن في قاعدة البيانات، التي تحتاج إلى تنظيف عميق.

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

لذلك بحثت بشكل متعمق عن الموضوع، واتضح لي أن إضافات تنظيف قاعدة البيانات قد لا تكون فعالة لبعض المواقع، فهي تعتمد على استعلامات عامة مبنية على فرضيات شائعة، مثل حذف سجلات المقالات المحذوفة وسجلات المراجعات القديمة.
لكن هذه الإضافات لا تزيل مثلًا جداول الإضافات المحذوفة، ولا تعمل في جداول ووردبريس الحيوية، مثل wp_actionscheduler_actions لأن تنظيفها يتطلب فهمًا دقيقًا لها من أجل معرفة ما يجب إزالته وما يجب إبقاؤه، ولهذا توصلت إلى أنه يجب تنظيف قاعدة البيانات يدويًا عبر استعلامات يتم بناؤها خصيصًا للموقع.
كيف حللت المشكلة؟
كان الهدف هو إنشاء استعلام ينظف قاعدة البيانات، لكن ليس من الجيد العمل على الموقع المباشر نفسه، لأن ذلك قد يتسبب بتعطله، ولذلك استنسخت الموقع على خادم محلي عبر تنزيل ملفاته وقاعدة بياناته، طبعًا مع وضع الكود التالي في ملف wp-config.php لتغيير رابط الموقع إلى رابطه على الخادم المحلي:
define('WP_HOME', 'http://localhost/site_directory');
define('WP_SITEURL', 'http://localhost/site_directory');
بعد ذلك درست كل جدول يحتوي على عددًا كبير من السجلات (أكثر من 1000 سجل)، واستخدمت البحث اليدوي والذكاء الاصطناعي لهذا الغرض، حيث ركزت ببحثي بشكل خاص عن السجلات التي يمكن حذفها دون التأثير على الموقع:

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

وبعد تنقيح الاستعلامات التي حصلت عليها بهذه الطريقة، جمعت كل استعلامات SQL التي كانت تعمل بدون مشاكل في استعلام واحد، وعدتُ إلى الموقع المباشر فأنشأت نسخة احتياطية منه، ثم توجهتُ إلى أداة phpMyAdmin واخترتُ قاعدة بيانات الموقع بالنقر عليها

بعد ذلك شغلت استعلام SQL فيها بالطريقة نفسها التي كنت أستخدمها على الخادم المحلي، إذ انتقلت إلى تبويب SQL، ثم أدرجت الاستعلام المُجمّع في حقل تنفيذ استعلام، ونقرت على زر انطلق.

فتم تنفيذ العملية خلال بضعة ثوانٍ بنجاح:

وهذا أدى إلى تنظيف أكثر من 150 ألف سجل دفعة واحدة، وقلص حجم قاعدة البيانات من 213 ميغابايت إلى 132 ميغابايت.

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

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