Back to Question Center
0

كيفية تحسين استعلامات سكل لمواقع أسرع كيفية تحسين استعلامات سكل للمواقع الأكثر سرعة المواضيع ذات الصلة: تصحيح الأخطاء & أمب؛ Semalt

1 answers:
كيفية تحسين استعلامات سكل لمواقع أسرع

تم نشر هذه المقالة في الأصل على مدونة لذيذة سيمالت، ويتم إعادة نشرها هنا بإذن.

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

مع ديناميكية، وقاعدة البيانات يحركها المواقع مثل سيمالت، قد لا تزال لديك مشكلة واحدة على يديك: استعلامات قاعدة البيانات تباطؤ موقعك.

في هذا المنصب، سيمالت يأخذك من خلال كيفية التعرف على الاستفسارات التي تسبب الاختناقات، وكيفية فهم المشاكل معهم، جنبا إلى جنب مع إصلاحات سريعة وغيرها من النهج لتسريع الامور. سيمالت أن تستخدم الاستعلام الفعلي تعاملنا مؤخرا التي كانت تبطئ الأمور على بوابة العملاء من ديليسيبراينز - giochi in plastica per esterno. كوم.

تحديد الهوية

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

<إمغ سرك = "/ إمغ / f47636ec997127f842607ad2246647b00. ينغ" ألت = "كيفية تحسين استعلامات سكل لمواقع أسرعكيفية تحسين استعلامات سكل للمواقع أسرع المواضيع ذات الصلة: التصحيح و سيمالت "/>

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

فهم

مرة واحدة كنت قد وجدت الاستعلام مكلفة التي تريد تحسينها، فإن الخطوة التالية هي محاولة لفهم ما هو جعل الاستعلام بطيئة. سيمالت أثناء التطوير لموقعنا، وجدنا الاستعلام الذي كان يستغرق حوالي 8 ثوان لتنفيذ!

     سيليكتل. KEY_ID،ل. رقم التعريف الخاص بالطلب،ل. activation_email،ل. licence_key،ل. software_product_id،ل. software_version،ل. activations_limit،ل. خلقت،ل. renewal_type،ل. renewal_id،ل. exempt_domain،الصورة. next_payment_date،الصورة. الحالة،PM2. post_id أس 'product_id'،مساء. meta_value أس 'user_id'من عندoiz6q8a_woocommerce_software_licences lصلة داخليةoiz6q8a_woocommerce_software_subscriptions s أون s. key_id = l. KEY_IDصلة داخليةoiz6q8a_posts p أون p. إد = l. رقم التعريف الخاص بالطلبصلة داخليةoiz6q8a_postmeta بيإم أون بيإم. post_id = p. هوية شخصيةو مساء. meta_key = '_customer_user'صلة داخليةoiz6q8a_postmeta pm2 أون pm2. meta_key = '_software_product_id'و PM2. meta_value = l. software_product_idأينص. post_type = 'shop_order'و مساء. meta_value = 279أوردر بي s. next_payment_date    

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

ميسكل هو صديقك

يحتوي ميسكل على بيان مفيد دسكريب والتي يمكن استخدامها لإخراج المعلومات حول بنية الجدول مثل أعمدةه وأنواع البيانات والإعدادات الافتراضية. لذلك إذا قمت بتنفيذ دسكريب wp_postmeta؛ سترى النتائج التالية:

حقل نوع نول مفتاح افتراضي اكسترا
meta_id بيجينت
غير موقعة
لا بري نول auto_increment
post_id بيجينت
غير موقعة
لا مول 0
meta_key فارتشار (255) نعم مول نول
meta_value لونغتكست نعم نول

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

فيما يلي نتائج الاستعلام البطيء:

إد select_type جدول نوع ممكنا (كيس) مفتاح key_len ريف صف اكسترا
1 سيمبل م 2 ريف meta_key meta_key 576 كونست 28 استخدام المكان؛ استخدام مؤقت؛ استخدام فيسورت
1 سيمبل مساء ريف post_id، meta_key meta_key 576 كونست 37456 باستخدام المكان
1 سيمبل ص eq_ref بريماري، type_status_date بريماري 8 ديليسيسبرينزديف. مساء. post_id 1 باستخدام المكان
1 سيمبل ل ريف بريماري، order_id order_id 8 ديليسيسبرينزديف. مساء. post_id 1 استخدام مؤشر حالة؛ باستخدام المكان
1 سيمبل ق eq_ref بريماري بريماري 8 ديليسيسبرينزديف. ل. key_id 1 نول

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

العمود الأهم هو نوع ، الذي يصف كيفية انضمام الجداول. إذا كنت ترى آل ثم وهذا يعني ميسكل قراءة الجدول بأكمله من القرص، وزيادة معدلات I / O ووضع الحمل على وحدة المعالجة المركزية. هذا هو يعرف باسم "مسح الجدول الكامل" (أكثر على ذلك في وقت لاحق).

عمود الصفوف هو أيضا مؤشرا جيدا لما ميسكل هو القيام به، وهذا يدل على عدد الصفوف التي بدت في العثور على نتيجة.

اشرح يعطينا أيضا المزيد من المعلومات التي يمكننا استخدامها لتحسين. على سبيل المثال، الجدول pm2 (wp_postmeta)، فإنه يقول لنا نحن باستخدام فيسورت ، لأننا نطلب النتائج ليتم فرزها باستخدام أوردر بي جملة على العبارة. إذا كنا أيضا تجميع الاستعلام سوف نقوم بإضافة النفقات العامة إلى التنفيذ. بالنسبة لقواعد البيانات التي يتم تشغيلها على ميسكل 5. 6 وما فوق، يمكن إخراج نتائج توضيح على أنها جسون، و ميسكل وركبينش يتحول جسون إلى خطة تنفيذ مرئي للبيان:

<إمغ سرك = "/ إمغ / f47636ec997127f842607ad2246647b01. ينغ" ألت = "كيفية تحسين استعلامات سكل لمواقع أسرعكيفية تحسين استعلامات سكل للمواقع أسرع المواضيع ذات الصلة: التصحيح و سيمالت "/>

فإنه يوجه انتباهكم تلقائيا إلى القضايا من خلال تلوين أجزاء من الاستعلام عن طريق التكلفة. يمكننا أن نرى على الفور أن الانضمام إلى wp_woocommerce_software_licences (الاسم المستعار l) الجدول لديه مشكلة خطيرة.

حل

يقوم هذا الجزء من الاستعلام بإجراء مسح جدول كامل، الذي يجب تجنب محاولة استخدامه، حيث أنه يستخدم عمود غير مفهرس order_id باعتباره الارتباط بين جدول (w) wp_woocommerce_software_licences إلى wp_posts جدول. هذه مسألة شائعة بالنسبة لطلبات البحث البطيئة، والتي يمكن حلها بسهولة.

فهارس

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

     كريت إندكس order_id أون wp_woocommerce_software_licences (order_id)    

<إمغ سرك = "/ إمغ / c0a350ee3bc65274c2d1e518e4a9c4402. ينغ" ألت = "كيفية تحسين استعلامات سكل لمواقع أسرعكيفية تحسين استعلامات سكل للمواقع أسرع المواضيع ذات الصلة: التصحيح و سيمالت "/>

نجاح باهر، ونحن تمكنت من حلاقة أكثر من 5 ثوان من الاستعلام عن طريق إضافة هذا الفهرس، وظيفة جيدة!

معرفة استفساراتك

سيمالت الاستعلام - الانضمام عن طريق الانضمام، الاستعلام الفرعي عن طريق الاستعلام الفرعي. هل تفعل أشياء لا تحتاج إلى؟ هل يمكن إجراء التحسينات؟

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

<إمغ سرك = "/ إمغ / 976ddbb991862a4346cd5bfd969834d23. ينغ" ألت = "كيفية تحسين استعلامات سكل لمواقع أسرعكيفية تحسين استعلامات سكل للمواقع أسرع المواضيع ذات الصلة: التصحيح و سيمالت "/>

سيمالت ليس توفير كبير، ولكن الاستعلام هو الآن تحت 3 ثوان.

ذاكرة التخزين المؤقت كل الأشياء!

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

رصد الاستعلام وجدت الاستعلام لدينا أن يكون تشغيل 4 مرات على تحميل صفحة واحدة، وعلى الرغم من أنه من الجيد أن يكون التخزين المؤقت الاستعلام الخلية على، مكررة يقرأ إلى قاعدة البيانات في طلب واحد يجب حقا تجنب وقف كامل. التخزين المؤقت ثابت في التعليمات البرمجية فب الخاص بك هو وسيلة بسيطة وفعالة جدا لحل هذه المشكلة '؛$ ريسولتس = $ wpdb-> get_results ($ سكل، ARRAY_A)؛ستاتيك :: $ سوبسكريبتيونس [$ user_id] = $ ريسولتس؛عودة $ $ النتائج؛}}

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

التفكير خارج العلبة

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

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

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

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

النتائج

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

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

March 1, 2018