حيل مفيدة للعثور على استعلامات قاعدة بيانات WordPress البطيئة وإصلاحها

نشرت: 2019-04-17

يمكن أن تؤدي استفسارات SQL المعتدلة إلى تنفيذ عملية تنفيذ موقع تطوير تطبيق WordPress. من حين لآخر ، فإن الاستفسارات المعتدلة هي نتيجة لاحقة لـ SQL غير المنظمة بشكل كافٍ والتي لا ينبغي أن تتم بهذه الطريقة.

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

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

البحث عن استعلامات بطيئة

يتضمن العثور على أصل الأسئلة المعتدلة مرحلتين:

  1. معرفة الأسئلة المعتدلة حقًا.
  2. تحديد البرنامج الذي يقوم بتشغيلها.

يجب على المرء أن يأخذ بعين الاعتبار وحدتين و SaaS واحد يمكنهما تمكينهما من اكتشاف الاستفسارات المعتدلة.

مراقبة الاستعلام

للاستفادة من المعلومات حول الصفحة التي يتم تشغيلها حاليًا ، يمكن استخدام هذه الوحدة. على الرغم من وجود مجموعة كاملة من البيانات حول الأنشطة الداخلية لـ WordPress ، فإنه يعطي تفصيلاً من نقطة إلى نقطة لما يلي:

  • كم عدد الأسئلة التي ظهرت على هذا الطلب؟
  • أي استفسار على الصفحة استغرق أقصى قدر من الوقت؟
  • ما هي القدرات التي استثمرت أكبر قدر من الطاقة في أسئلة SQL؟
  • سواء نشأت هذه الاستفسارات من الوحدات أو الموضوعات أو من مركز WordPress

تتعرف شاشة الاستفسار حتى على الأسئلة المعتدلة ذات المحتوى الأحمر المزعج ، مما يجعل من السهل جدًا تحديد مشكلة SQL.

شريط التصحيح

أداة رائعة أخرى للعثور على لغة SQL المعتدلة بشكل متجمد هي وحدة Debug Bar القديمة والموثوقة. يوفر شريط التصحيح بيانات واحدة حول الأداء الداخلي لـ WordPress عندما يتم تحميل الصفحة بأمور مثل:

  1. معلمات WP_Query
  2. طلب البيانات (جرد تنسيق قواعد التجديد)
  3. استفسارات SQL التي تنتجها الصفحة الحالية

لتمكين اتباع SQL في شريط التصحيح ، يجب على المستخدم تحديد نقطة للسماح لـ SAVEQUERIES في مكان ما على الموقع - على الأرجح في wp-config.php

تحذير: تؤثر SAVEQUERIES على التنفيذ على الموقع ، ويفترض ألا تستخدم على خادم جيل. ومع ذلك ، يمكن استخدامه على آلة التقدم.

العثور على SQL المعتدل ليس بالأمر السهل للغاية مع Debug Bar. على سبيل المثال ، لا يقدم الجداول القابلة للفرز أو ميزة الاستعلامات المعتدلة للمستخدم. ما يوفره شريط التصحيح هو قدرة تتبع توجه المستخدم بدقة نحو اتجاه أصل السؤال.

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

جديد

NewRelic هي إدارة تقيس وتراقب تنفيذ تطوير تطبيقات الويب ، بما في ذلك تطوير تطبيقات WordPress. تعطي الإدارة طنًا متريًا من البيانات حول تنفيذ الموقع. ليس من الصعب أن تفقد كل الإحساس بالاتجاه في المعلومات التي تقدمها NewRelic للمستخدم كل تفاصيل دقيقة لاستفسارات SQL.

هناك نوعان من التناقضات الجديرة بالملاحظة بين NewRelic والوحدات النمطية التي أشرنا إليها من قبل:

  1. تقدم NewRelic نظرة ثاقبة أكثر بكثير فيما يتعلق بتنفيذ PHP ، وصولاً إلى الحساب الدقيق للوقت الذي يقضيه في كل وظيفة
  2. تتعقب NewRelic كل طلب على الموقع بعيدًا عن الأنظار ، لذلك يمكن للمرء الرجوع إليه لاحقًا لاكتشاف SQL المعتدلة. الوحدات فقط أعطه الصفحة الحالية.

من المهم أن يكون لدى NewRelic مستوى ترتيب مجاني يوفر بيانات عامة حول تنفيذ الموقع ، ومع ذلك سيتعين على المرء الانتقال إلى ترتيب مدفوع للاحتمالات والنهايات الهائلة للتحقق من الطلبات الفردية وإيجاد استفسارات معتدلة.

فهم استعلام بطيء مع شرح

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

يمكن أن تمكّن كلمة مرور MySQL EXPLAIN من توضيح ما يحدث. تشير إضافة شرح إلى بداية الاستفسار إلى كيفية تنفيذ MySQL لأحد الأسئلة. بالنسبة إلى الاستفسارات المعقدة ، يمكن لـ "شرح" المساعدة في التمييز بين التركيز المعتدل في SQLs ، على سبيل المثال ، الاستعلامات الفرعية المعتدلة أو الأنشطة المهدرة.

إصلاح الاستعلامات البطيئة

نظرًا لأنه تم إدراك أن الاستعلامات معتدلة ، وقد كشفت EXPLAIN للمستخدم عن سبب ذلك ، فيجب اتخاذ خيارين لإصلاح هذه المشكلات التي تسبب النعاس.

الخيار 1: لف السؤال

قد يكون هناك سؤال يضع شاشة تحرير المنشور بمعدل بطيء جدًا. كان الاستعلام جزءًا من مربع التعريف الخاص بالحقول المخصصة.

الجزء المحدد من SQL هو إحضار قائمة meta_keys من جدول ks29so_postmeta والتي في جميع الاحتمالات لا تبدأ بعلامة الشرطة السفلية. يوضح تفسير GROUP BY أن كل نتيجة خاصة.

إجراء هذا الاستفسار عدة مرات ، إليك الوقت الذي يمكن أن يستغرقه الأمر:

1.7145 ثانية

1.7911 ثانية

1.8076 ثانية

1.7707 ثانية

1.8456 ثانية

يمكن للمرء أن يطور استعلامًا ينتج عنه مخرجات مماثلة. يجب أن يتم اختياره كواحد من نوع meta_keys. كلمة استثنائية هي كلمة مكافئة لكلمة خاصة ، والتي تصادف أن تكون تفسير SQL!

الخيار 2: إضافة فهرس

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

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

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

مع وجود ملف على meta_key ، فإن وقت سؤال SQL الأول يشبه إلى حد ما هذا:

0.0041 ثانية

0.0023 ثانية

0.0030 ثانية

0.0025 ثانية

0.0019 ثانية

هذا ذكي للغاية.

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

الخيار 3: تخزين نتائج الاستعلام مؤقتًا

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

تعد واجهة برمجة تطبيقات WordPress Transients API إحدى طرق حجز الاستعلامات. يتم استخدام العابرين للتخلص من عواقب المهام المكلفة ، على سبيل المثال ،

  • الطلبات إلى المواقع الخارجية (على سبيل المثال ، الحصول على مشاركات Facebook المستمرة)
  • كتل معالجة بطيئة (على سبيل المثال ، البحث عن سلاسل ضخمة ذات تعبير مألوف)
  • استفسارات بطيئة في قاعدة البيانات!
اختيار نهج

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

حقق الاختيار 1 (تغيير السؤال) نتائج رائعة. ومع ذلك ، ينبغي النظر في احتمال أن الاستفسار المعدل ليس له نتائج مماثلة بشكل عام. يمكن للمرء أن يفسد الشفرة عن غير قصد بسؤال غير مألوف إلى حد ما.

البديل 2 (بما في ذلك السجل) لا يتوقف باستمرار على الجدول والأقسام التي يستخدمها التحقيق. على حساب جداول مركز تطوير تطبيق WordPress ، يجب على المرء أن يؤكد على التأثيرات الأخرى للسجلات:

  • هل يتوقع روتين الانتعاش المركز قوائم إضافية؟
  • هل سيؤدي تضمين ملف إلى تنسيق الاستفسارات المختلفة ، مثل INSERT و UPDATE؟

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

عادة ، يختار الأشخاص الخيار 3. في حالة معينة ، يمكنه اختيار بديل آخر يعتمد على السؤال الذي يعمل على إصلاحه أو الموقع المحدد الذي به مشكلات SQL. من المؤكد أنه لا توجد استجابة ذات مقياس واحد يناسب الجميع لمعظم مشكلات التنفيذ ، لذلك يُسمح لأحدهم بالاختلاف مع قرار الآخر - أو حاول كل واحد من الثلاثة دون تأخير لحظة!

البقاء محدثًا

لقد حددت هنا مشكلة حقيقية. كان مربع الحقول المخصصة في CSS-Tricks حقًا مخالفًا لبعض استفسارات قاعدة البيانات المعتدلة للغاية. كما حددت أيضًا طرقًا مختلفة تجاه الترتيبات المحتملة.

تصور أفكار جديدة

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

يمكن للمرء إلغاء تسوية المعلومات عن طريق إنشاء جدول يخزن معلومات التصريح ، جنبًا إلى جنب مع معرف العميل ومعرف العنصر لجميع التراخيص والاستعلام ببساطة عن ذلك لعميل معين. قد يحتاج المرء إلى تعديل الجدول باستخدام مشغلات MySQL في INSERT / UPDATE / DELETE في جدول التراخيص (أو الآخرين الذين يعتمدون على كيفية تغيير المعلومات) ولكن هذا من شأنه أن يحسن بشكل كبير تنفيذ استجواب تلك المعلومات.

وبالتالي ، إذا قام العديد من الأشخاص بتخفيف السؤال في MySQL ، فقد يكون من الأسرع تقسيم الاستفسار إلى مفصلتين على الأقل وتنفيذهما بشكل مستقل في PHP وبعد ذلك جمع النتائج وتوجيهها في الكود.