خانه / وردپرس / آموزش وردپرس / آموزش جستجو و رفع کوئری های کند در دیتابیس وردپرس
راه اندازی سایت فروشگاهی دیجی کالا و بامیلو
"

تاریخ بروزرسانی: ۲۳ دی ۱۳۹۷ تعداد بازدید : 39 بازدید بدون دیدگاه

آموزش جستجو و رفع کوئری های کند در دیتابیس وردپرس

با سلام خدمت شما عزیزان امروز و در این مقاله به بررسی و آموزش جستجو و رفع کوئری های کند در دیتابیس وردپرس می پردازم، امیدوارم برایتان جالب و مفید باشد.

با توجه به طولانی بودن این مطلب در اینجا لیستی از مطالبی که در این مقاله به شما عزیزان ارائه خواهد شد، تهیه کرده ایم که در صورت نیاز بتوانید با کلیک کردن روی مطلب مورد نظرتان مستقیما به آن بخش بروید:

 

کوئری چیست؟ نقش کوئری ها در وردپرس چیست؟

کوئری یا پرس و جو یک اصطلاح است که برای توصیف اعمال انتخاب، درج، به روز رسانی یا حذف  داده ها در یک پایگاه داده استفاده می شود. پرس و جو ها در وردپرس، برای دسترسی به داده ها از پایگاه داده MySQL شما استفاده می شوند. چرا که وردپرس با استفاده از PHP و MySQL نوشته شده است.

برسی رفع کوئری های کند
جستجو و رفع کوئری های کند

هر بار که شما مشغول مشاهده یک صفحه وردپرس می شوید، در واقع پرس و جوهای MySQL در پس زمینه برای جمع آوری داده ها از پایگاه داده در حال کار هستند. این داده ها سپس به صورت پویا کدهای HTML را برای مرورگر شما تولید می کنند. هنگامی که کاربران هر چیزی را در WordPress ایجاد، ویرایش، حذف یا بروزرسانی می کنند، یک پایگاه داده ای پرس و جو به وجود می آید که ورودی کاربر را به دستورالعمل هایی تبدیل می کند که پس از اجرا توسط پایگاه داده ای کوئری ها نمایش داده می شوند.

شاید برایتان این سوال پیش بیاید که چگونه وردپرس بر اساس درخواست کاربر کدهای HTML را با پرس و جو پایگاه داده MySQL و با استفاده از PHP به صورت پویا ایجاد می کند؟

وردپرس دارای توابع و کلاس‌هایی است که به توسعه دهندگان و کاربران اجازه می‌دهند تا در پایگاه‌داده، پرس‌وجو های مد نظرشان را داشته باشند. برای نمونه : WP_Query, WP_User_Query, get_comments(), get_the_terms(), get_posts(), wp_get_recent_posts().

پرس و جو ها همچنین می توانند برای ایجاد پرونده های جدید در پایگاه داده (مثلا ایجاد یک پست) یا ویرایش سوابق موجود استفاده شوند. این کارها توسط وردپرس به صورت خودکار انجام می شود، همچنین توسعه دهندگان افزونه ها می توانند از پرس و جو برای ذخیره داده های خود در پایگاه داده وردپرس استفاده کنند.

یک پرس و جو وردپرس می تواند مواردی را براساس برچسب ها، دسته ها، عنوان، وضعیت و موارد دیگر جستجو کند. توسعه دهندگان می توانند از این برای ایجاد ویدجت سفارشی یا صفحات سفارشی استفاده کنند که یک مجموعه خاص از محتوا را نمایش می دهد.

کوئری کند چیست و چه تاثیری در وردپرس دارد؟

کوئری کند

پرس و جو های کند SQL می توانند عملکرد سایت وردپرس را کاهش دهند.

گاهی اوقات، کوئری های کند نتیجه فرم های پرس و جوی ضعیف در SQL هستند. که البته باید مراقب بود که چنین اشتباهی انجام نشود و فرم های نوشته شده در نهایت دقت تنظیم شوند. و گاهی اوقات کوئری های کند، در واقع یک کوئری سریع بوده اند که با افزایش سن سایت و گسترده تر شدن آن، کندتر و کندتر شد اند، و دیگر نمی توانند با پایگاه داده در حال توسعه، ادامه یابند.

بیایید صرف نظر از این که چرا در SQL پرس و جوها کند شده اند، نگاهی بیاندازیم به چند راه حل برای پیدا کردن و رفع کوئری های کند در وردپرس.

مراحل پیدا کردن کوئری های کند

پیدا کردن منبع کوئری های کند شامل ۲ مرحله می شود:

۱- شناسایی کوئری هایی که واقعا کند هستند

۲- پیدا کردن کد تولید و اجرای آنها

در اینجا دو افزونه و یک SaaS را که می توانند در پیدا کردن و رفع کوئری های کند به ما کمک کنند، معرفی و بررسی می کنیم.

افزونه Query Monitor

Query Monitor یک افزونه است که علاوه بر مجموعه ای کامل از اطلاعات مربوط به عملکرد داخلی وردپرس، اطلاعات زیادی در مورد صفحه فعلی ارائه می دهد. این افزونه به طور مفصل به شرح این مطالب می پردازد:

۱- چند پرس و جو در این درخواست رخ داده است؟

۲- کدام پرس و جو در این صفحه بیشتر از بقیه طول کشیده و طولانی تر بوده است؟

همین حالا ببینید:  کاربردی ترین افزونه های رایگان بکاپ در وردپرس

۳- کدام توابع بیشترین زمان را در پرس و جوهای SQL صرف کرده اند؟

۴- کدام یک از این درخواست ها از افزونه ها، تم ها یا هسته وردپرس آمده اند؟

 افزونه Query Monitor
رفع کوئری های کند با افزونه Query Monitor

 

Query Monitor کوئری های کند را با متن قرمز مشخص می‌کند، که خود این مطلب باعث می‌شود سریعتر مشکل SQL را پیدا کنید:

قرمز کردن کوئری های کند

افزونه Debug Bar

یکی دیگر از ابزارهای خوب برای پیدا کردن کوئری های کند در دیتابیس SQL، افزونه قدیمی Debug Bar است. Debug Bar اطلاعاتی در مورد کارهای داخلی وردپرس در هنگام بارگذاری یک صفحه را در اختیار شما قرار می دهد. اطلاعاتی از قبیل:

۱- پارامترهای WP_Query

۲- درخواست اطلاعات (از جمله قوانین بازنویسی مطابقت)

۳- پرس و جو های ایجاد شده توسط صفحه فعلی

برای فعال کردن شماره ۳ (ردیابی SQL) در نوار Debug Bar، باید گزینه  SAVEQUERIES را در جایی در سایت خود فعال کنید، احتمالا در wp-config.php و بوسیله کدی مانند آنچه در زیر آمده:

توجه: SAVEQUERIES  بر عملکرد سایت شما تأثیرگزار است و احتمالا نباید در یک سرور تولید استفاده شود. بهتر است آن را روی یک development machine یعنی یک ماشین توسعه استفاده کنید.

پیدا کردن کوئری های کند بااستفاده از Debug Bar کار آسانی نیست. به عنوان مثال، جدول های مرتب شده را ارائه نمی دهد و یا درخواست های کند را برای شما با رنگ روشن مشخص نمی کند. آنچه Debug Bar ارائه می دهد، یک ردیابی عملکرد است که به شما دقیقا جایی را برای یافتن منبع پرس و جوی کند نشان می دهد.

این یک لیست از فایل های بارگذاری شده و توابعی است که در نتیجه پرس و جو اجرا می شوند. اغلب آخرین ورودی در لیست برای شما جالب توجه خواهد بود؛ چون این جایی است که کوئری کند اجرا شده و شما باید جستجوی خود را آغاز کنید. نکته مفید در مورد داشتن متن هر تابعی که منجر به این پرس و جو می‌شود این است که می‌تواند روشن کند که چرا در وهله اول SQL اجرا شده‌ است .

نرم افزار NewRelic

NewRelic یک سرویس است که اندازه گیری و نظارت بر عملکرد برنامه وب وردپرس شما را، انجام می دهد. این سرویس اطلاعات استاندارد زیادی در مورد عملکرد سایت شما فراهم می کند. در NewRelic به راحتی می توانید به داده های خراب شده دسترسی پیدا کنید چرا که NewRelic به صورت خط به خط جزییات کدهای اجرا شده در پرس و جوهای SQL را به شما می دهد.

دو تفاوت عمده بین NewRelic و افزونه هایی که قبلا ذکر کردیم وجود دارد:

۱- NewRelic جزئیات بیشتری در مورد عملکرد پی اچ پی سایتتان را به میزان میلی ثانیه در هر تابع، ارائه می دهد.

۲- NewRelic اطلاعات مربوط به عملکرد هر درخواست در سایت شما را در پس زمینه  پی گیری و ارائه می کند، بنابراین بعدا می توانید به آن برای پیدا کردن کد SQL کند رجوع کنید. افزونه ها تنها اطلاعات مربوط به صفحه فعلی شما را می دهند.
شایان ذکر است که NewRelic دارای یک نسخه رایگان است که اطلاعات کلی درباره عملکرد سایت شما را ارائه می دهد، اما برای نظارت بر درخواست‌های فردی و پیدا کردن درخواست‌های کند باید نسخه کامل این نرم افزار را بخرید.

 

نرم افزار NewRelic

درک یک کوئری کندبا EXPLAIN

تا اینجای کار ما با ابزارهایی برای یافتن پرس و جوهای کند آشنا شدیم. حالا باید ببینیم که چرا این کوئری ها همه چیز را خراب می کنند.

کلمه کلیدی MySQL EXPLAIN می‌تواند به شما کمک کند تا  بفهمید که چه اتفاقی دارد می‌افتد . اضافه کردن EXPLAIN به شروع یک پرس و جو نشان می‌دهد که چگونه MySQL یک پرس و جو را اجرا می‌کند . برای پرس و جوهای پیچیده ، EXPLAINمی‌تواند به شناسایی نقاط کند در SQL ها ، مانند عملیات کند یا ناکارآمد کمک کند .

به عنوان مثال، اگر پرس و جویی دارید که شبیه به این بود:

شما می توانید EXPLAIN پرس و جو را به سادگی با کد زیر انجام دهید:

در اینجا خروجی EXPLAIN در phpMyAdmin ظاهر می شود:

خروجی EXPLAIN در phpMyAdmin

 

گر چه من شخصا همه کارهای داخلی SQL را درک نمی کنم، اما اجرا کردن دستور EXPLAIN در پرس و جوها  این امکان را می دهد که اطلاعات خوب و نسبتا روشنی در رابطه با اینکه چگونه MySQL کدهای SQL را اجرا می کند، بدست بیاوریم. مثلا اینکه آیا پرس و جو  از شاخص استفاده می کند یا آیا کل جدول را اسکن می کند؟ EXPLAIN حتی برای درخواستهای ساده، اطلاعاتی را فراهم می کند تا به درک آنچه در حال وقوع است کمک کند.

همین حالا ببینید:  چگونه یک برنامه بازاریابی (Marketing Plan) مفید ایجاد کنیم؟

شما می توانید EXPLAIN را از خط فرمان MySQL یا هر ابزار MySQL که مورد علاقه تان است اجرا کنید.

انواع راه حل برای رفع کوئری های کند

حالا که می دانیم پرس و جوی ما کند است، و EXPLAIN به ما گفته است که چرا این طور است، باید به دنبال راهی برای رفع کوئری های کند باشیم. در اینجا چند راه حل وجود دارد:

# گزینه ۱: کوئری را تغییر دهید

در CSS-Tricks، ما کوئری ای داشتیم که عملکرد روی صفحه Edit Post را به سرعت حلزون رسانده بود. پرس و جو بخشی از  جعبه متای سفارشی کردن فیلدها بود. در اینجا کد SQL آن آن موجود است:

این بیت خاص SQL یک لیست از meta_keys از جدول wp_postmeta است که با underscore (_) آغاز نمی شود. کلمه GROUP BY به این معنی است که هر نتیجه منحصر به فرد است.

در اینجا مدت زمان طول کشیده برای اجرای این پرس و جو در ۵ بار را می بینیم :

۱٫۷۱۴۶ ثانیه
۱٫۷۹۱۲ ثانیه
۱٫۸۰۷۷ ثانیه
۱٫۷۷۰۸ ثانیه
۱٫۸۴۵۶ ثانیه

اینجا این سوال مطرح می شود که آیا می توانیم پرس و جوی دیگری را برای رسیدن به یک نتیجه بهتر بنویسیم؟ جواب این است که باید meta_keys منحصر به فرد را انتخاب کنید. منظور از منحصر به فرد،یک کلمه متمایز است که فقط یک شرح روی SQL داشته باشد!

با استفاده از کلمه DISTINCT، می توانیم موارد زیر را انجام دهیم:

اجرای  پرس و جوی بازنویسی شده نتایج زیر را ارایه می‌دهد :

۰٫۳۷۶۴ ثانیه
۰٫۲۶۰۷ ثانیه
۰٫۲۶۶۱ ثانیه
۰٫۲۷۵۱ ثانیه
۰٫۲۹۸۶ ثانیه

گر چه این یک مقایسه علمی نیست اما بهبود قابل‌توجهی را نشان می‌دهد که خود سبب رفع کوئری های کند خواهد شد .

گزینه ۲: یک فهرست شاخص گذاری اضافه کنید

هنگامی که یک query SQL را در یک جدول MySQL استاندارد اجرا می کنید، MySQL باید تمام جدول را اسکن کند تا مشخص شود کدام ردیف مربوط به این پرس و جوی خاص است. وقتی جدول بزرگ می شود، اسکن کردن جدول زمان زیادی می گیرد.

اینجاست که ارزش ایندکس و ایندکس گذاری در کار کردن با SQL معلوم می شود، ایندکس ها یا همان شاخص ها داده ها را در جدول می گیرند و آن را سازماندهی می کنند تا دست یابی به اطلاعات را بسیار آسان تر کنند. سازماندهی داده ها به یک روش خاص شاخص گذاری، کمک می کند تا تعداد دفعات اسکن MySQL برای هر پرس و جو به شدت کاهش یابد و در نتیجه کمک بزرگی در مورد رفع کوئری های کند می کند.

شاخص ها را در هر جدول می توان در یک یا چند ستون ایجاد کرد. نحو کدنویسی شاخص ها به این شکل است:

با یک شاخص در meta_key، زمان واقعی پرس و جو SQL به نظر می آید به شرح زیر است:

۰٫۰۰۴۲ ثانیه
۰٫۰۰۲۴ ثانیه
۰٫۰۰۳۱ ثانیه
۰٫۰۰۲۶ ثانیه
۰٫۰۰۲۰ ثانیه

این واقعا سریع و شگفت انگیز  است!

یک هشدار در مورد شاخص ها: هر بار که در SQL  بوسیله INSERT یک سطر جدید ایجاد می شود یا در یک جدول، شاخص بوسیله UPDATE بروزرسانی می شود، این شاخص دوباره محاسبه می شود، که البته می تواند عملیات پر هزینه ای باشد. شاخص ها خواندن را از جدول سریع تر می کنند، اما نوشتن در جدول کندتر می شود.

توجه: یک شاخص که به خوبی انتخاب و قرار داده شده باشد می تواند پرس و جوی در جداول خود را به شدت سریع کند، اما بدون نظارت بر اثرات کلی شاخص در پایگاه داده، نباید خیلی به دنبال شاخص گذاری رفت.

همین حالا ببینید:  آموزش ویدیویی وردپرس | طراحی وب سایت بدون دانش برنامه نویسی

گزینه ۳: نتایج پرس و جو را ذخیره کنید

یک راه حل دیگر برای رفع کوئری های کند، زمانی که فهمیدیم که یک پرس و جوی کند داریم این است که به جای تغییر پرس و جو، صرفا نتایج جستجو را ذخیره کنیم، به نظرتان چه اتفاقی می افتد؟ به این ترتیب، ما محدودیتی ایجاد می‌کنیم که این پرس و جو چه زمانی اجرا شود و ما اغلب اوقات یک “گذرگاه آزاد“ به دست می آوریم.

برای ذخیره سازی پرس و جو، می توانیم از WordPress Transients API استفاده کنیم. Transients برای ذخیره سازی نتایج عملیات های سنگین و پرهزینه، مانند:

۱- درخواست های وب سایت های خارجی (به عنوان مثال، پست های اخیر فیس بوک)

۲- تکه های کند پردازش (به عنوان مثال جستجو رشته های بزرگ با یک عبارت منظم)

۳- درخواستهای پایگاه داده کند

ذخیره نتیجه یک پرس و جو، بوسیله Transients چیزی شبیه به این است:

ذخیره سازی نتایج پرس و جو به عنوان یک transient مانند این بدان معنی است که پرس و جو تنها یک بار در هر ساعت یا حتی کمتر انجام خواهد شد. دانستن این موضوع ما را به یک هشدار در استفاده از TRANSIENT هدایت می کند: در استفاده از transient برای چیزهایی که زیاد تغییر می کنند مراقب باشید.

اگر شما یک پرس و جو با نتایجی که اغلب تغییر نمی کند، دارید باید بدانید استفاده از transients یک روش عالی برای جلوگیری از استفاده زیاد از پایگاه داده است.

انتخاب یک رویکرد در رفع کوئری های کند

ما در این مقاله سه گزینه برای رفع کوئری های کند را بررسی کردیم، اما احتمالا راه های زیاد دیگری برای رفع کوئری های کند وجود دارد. سوال این است: اما کدام رویکرد نیاز ما را بهتر برآورده می کند؟

در هنگام کار بر روی کدی که متعلق به خودتان نیست، ترجیحا به صورت حداکثری از برنامه نویس پیروی کنید .

گزینه ۱ (بازنویسی پرس و جو) نتیجه عالی ای را به دست آمد، اما اگر بازنویسی مجدد پرس و جو همیشه نتایج مشابهی نداشته باشد چه؟ ممکن است ما به صورت ناخواسته کوئری خود را با یک کد دیگر کندتر کنیم.

گزینه ۲ (اضافه کردن یک شاخص) بسته به جدول و ستون هایی که توسط پرس و جو استفاده می شود، همیشه امکان پذیر نیست. بعلاوه در مورد جداول هسته وردپرس،  دو نگرانی عمده در مورد عوارض جانبی شاخص ها وجود دارد:

۱- آیا برنامه به روز رسانی هسته انتظار شاخص‌های اضافی را دارد ؟یا به عبارتی توانایی بروزرسانی شاخص های اضافی را دارد؟

۲- آیا اضافه کردن یک فهرست شاخص سرعت سایر کوئری ها را کاهش خواهد داد؟

گزینه ۳ (ذخیره نتایج از طریق transients) که دارای حداقل تاثیر است – در اینجا پرس و جو اصلی را تغییر نمی دهیم و نیازی به تغییر ساختار پایگاه داده نداریم.

دراکثر موارد  از گزینه ۳ استفاده می شود. البته ممکن است شما با توجه به پرس و جوی خاص خودتان یا مشکلات SQL خاص سایت خودتان، گزینه دیگری را انتخاب کنید. معمولا برای اکثر مشکلات پاسخ ها و عملکرد مناسب یکسان وجود ندارد، بنابراین شما می توانید انتخاب دیگری داشته باشید، یا تمام موارد را حداقل برای یک بار امتحان کنید!

امیدوارم این مقاله در مورد رفع کوئری های کند برایتان مفید بوده باشد.

منابع:css-tricks.com و wpbeginner.com

سوالی دارید؟ سوالتون رو در نظرات مطرح کنید 🙂 

مطالب مرتبط:

آموزش رفع مشکل خروج ناخواسته از سایت وردپرس

کلیدهای میانبر در وردپرس

جستجوی سریع مطالب در وردپرس

افزونه ارسال لینک دانلود به ایمیل

منبع: تیک تم– ارائه دهنده مقالات: قالب چندمنظوره وردپرس– ویدیو آموزشیریپورتاژ آگهی

 

آموزش جستجو و رفع کوئری های کند در دیتابیس وردپرس
لطفا امتیاز بدهید

لینک کوتاه این مطلب: https://tiktheme.com/?p=14378


کانال تلگرام تیک تم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *