آموزش جستجو و رفع کوئریهای کند در دیتابیس وردپرس
کوئریهای کند موجود در دیتابیس وردپرس یکی از دلایل اصلی کند شدن وردپرس می باشند که براحتی میتوانند کارایی و عملکرد سایت شما را تحت تاثیر خود قرار دهند.
در واقع به علت ضعیف و کند بودن این کوئری ها، اجرای آنها میتواند عملکرد دیتابیس وردپرس را مختل می کند.
این کوئری ها از ابتدا کند نبودند، بلکه رفته رفته بر اثر ازدیاد دادههای سایت و افزایش استفاده از وردپرس، کند شدند و ضعیف بودن آنها، بر عملکرد وردپرس اثر منفی خواهد گذاشت.
اما راه حل چیست؟ آیا میتوان این کوئری های کند در دیتابیس را شناسایی کرد و آنها را برطرف نمود؟
وستا سرور در این مقاله قصد دارد به آموزش نحوه جستجو و رفع کوئریهای کند در دیتابیس وردپرس بپردازد.
نکته: راهکارهایی که در ادامه به آنها میپردازیم را باید برای چند ماه انجام دهید زیرا صرفا با یکبار شناسایی کوئری های کند و رفع آنها، مشکل کند بودن وردپرس برطرف نخواهد شد.
در ادامه ابتدا به نحوه جستجو و یافتن کوئری های کند در دیتابیس وردپرس و سپس به نحوه رفع آنها میپردازیم.
نحوه جستجو و یافتن کوئریهای کند در دیتابیس وردپرس
برای انجام این کار، در ادامه قصد داریم از افزونه استفاده کنیم.
بررسی کوئری ها با استفاده از افزونه Query Monitor
افزونه ای که قرار است برای اینکار استفاده کنیم، افزونه Query Monitor است.
این افزونه قابلیت های مختلفی دارد. از جمله قابلیت های این افزونه که میتواند به ما در شناسایی کوئری های کند موجود در صفحه فعلی کمک کنند عبارت اند از:
۱- تعداد کوئری های انجام گرفته در صفحه فعلی
۲- مقایسه کوئری ها و شناسایی کوئریهای طولانیتر
۳- شناسایی توابع زمانبر وردپرس در هنگام اجرای کوئریهای SQL
و …
روش استفاده از افزونه:
برای استفاده از این افرونه، ابتدا باید آن را نصب و فعال نمایید برای اینکار مراحل زیر را طی نمایید:
گام اول
به پیشخوان وردپرستان بروید و از منوی آن، روی ” افزونه ها “ کلیک کنید و سپس از میان زیرمنو های آن گزینه ” افزودن افزونه “ انتخاب کنید.
گام دوم
در صفحه باز شده از قسمت باکس جستجو، عبارت ” Query Monitor “ را جستجو کنید و افزونه موردنظر را نصب و سپس فعال نمایید
گام سوم
بعد از نصب و فعالسازی افزونه، به پیشخوان وردپرس بروید. مشاهده می کنید که در نوار ابزار وردپرس قسمتی مطابق تصویر زیر اضافه شده است که با کلیک روی آن میتوانید اطلاعاتی در مورد کوئری های موجود در صفحه ببینید.
نکته: با کمک این افزونه، کوئری های با مدت زمان اجرای بالا با رنگ قرمز نمایش و شناسایی میشوند.
شناسایی منشا کوئریهای کند در دیتابیس وردپرس
بعد از شناسایی کوئریهای کند، باید کدهایی که این کوئریها را تولید میکنند را بیابیم و سپس با بررسی این کدها به رفع مشکل بپردازیم.
این کدها یا منشا تولید کوئری ها میتواند مربوط به هسته وردپرس، افزونه ها یا قالب وردپرس باشد.
ممکنه بدلایل مختلفی از جمله بهینه نبودن کدها و یا ناسازگاری آنها با قالب یا افزونه های سایت، اجرای کوئری یا کوئری های آنها زمانبر شود و در نهایت به کند شدن وردپرس بینجامد.
برای یافتن این کدها یا منشا کوئری های کند، میتوانید از کلمه کلیدی EXPLAIN در MYSQL استفاده کنید. تا اطلاعاتی در مورد عامل کندی سرعت وردپرس بیابید.
کلمه کلیدی EXPLAIN، میتواند به شما در شناسایی عوامل کندی در SQLها کمک کند.
بطور مثال کوئری زیر را در نظر گیرید:
SELECT slow_column FROM slow_table
حال اگر از EXPLAIN در کوئری بالا استفاده کنید به صورت زیر خواهد بود:
EXPLAIN SELECT slow_column FROM slow_table
بعد از اجرای این کد با استفاده از خط فرمان MySQL خود، خواهید دید که چه چیزی در SQL دیتابیس داره اجرا میشود.
رفع کوئریهای کند در دیتابیس وردپرس
نکته: توجه داشته باشید که رفع کوئری های کند در دیتابیس وردپرس، نیازمند مهارت و دانش فنی شماست. بنابراین اگر در این زمینه آگاهی لازم را ندارید یا اطلاعات کمی دارید هرگز خودسرانه اقدام به رفع آنها نکنید.
راه و روش های زیادی برای رفع کوئریهای کند در وردپرس وجود دارد. ما در ادامه به معرفی ۳ مورد از آنها میپردازیم:
راه اول: تغییر کوئری
فرض کنید بطور مثال درخواست زیر باعث کند شدن سرعت اجرای کوئری در دیتابیس شده است.
SELECT meta_key FROM wp_postmeta GROUP BY meta_key HAVING meta_key NOT LIKE ‘\\_%’ ORDER BY meta_key LIMIT 100
با اجرای این درخواست، قرار است یک لیست از meta_keys که در جدول wp_postmeta است و با کاراکتر (_) شروع نمیشوند نمایش داده شود. بطوریکه هر نتیجه حاصل از این کوئری یکتا باشد.
که این کار با استفاده از کلمه کلیدی GROUP BY صورت میگیرد. با اجرای کوئری مذکور نتایج زیر حاصل خوهند شد:
7146 ثانیه
1.7912 ثانیه
8077 ثانیه
7708 ثانیه
8456 ثانیه
حال برای کاهش این مدت زمان ها میتوانیم از یک meta_keys منحصر بفرد و یکتا بهره ببریم. به این منظور از کلمه کلیدی DISTINCT استفاده میکنیم:
SELECT DISTINCT meta_key FROM wp_postmeta WHERE meta_key NOT LIKE ‘\\_%’ ORDER BY meta_key
حال اگر این کوئری را اجرا کنیم خواهیم دید که مدت زمان ها کاهش پیدا کرده اند:
3764 ثانیه
2607 ثانیه
2661 ثانیه
2751 ثانیه
2986 ثانیه
مشکلی که در این روش وجود دارد این است که با تغییر کوئری ممکن است آن نتیجه مطلوب اتفاق نیوفتد و حتی ممکنه با این کار اجرای کوئری را کندتر کنیم.
راه دوم: اندیس گذاری
با اجرای یک کوئری روی یک جدول MySQL ،MySQL باید همه جدول ها را بررسی کند تا ردیف مربوط به این کوئری در جدول را مشخص کند.
در اینصورت با بزرگ بودن دیتابیس موردنظر، این بررسی بیشتر زمان خواهد برد.
اما در این ميان شاخص ها و اندیس ها چه نقشی دارند؟
شاخصها بعد از دریافت دادهها از جدولی، به مدیریت این اطلاعات می پردازند.
سازماندهی دادهها توسط شاخصها باعث کاهش این مقدار برای هر کوئری خواهد شد.
بطور مثال شاخصها را میتوان مانند نمونه زیر به ستونهای تک یا چند ستون اضافه کرد.
CREATE INDEX wp_postmeta_csstricks ON wp_postmeta (meta_key)
با اجرای کوئری بالا و با استفاده از شاخص meta_key، زمان واقعی حاصل شده به شرح زیر خواهد بود:
0042 ثانیه
0024 ثانیه
0031 ثانیه
0026 ثانیه
0020 ثانیه
حتی با اضافه کردن داده یا سطر جدید یا بروزرسانی و تغییر داده ای از یک جدول، این شاخص مجدد محاسبه خواهد شد.
شاخصها در واقع میتوانند سرعت اجرای کوئری را افزایش دهند.
شاخص ها خواندن و بازیابی اطلاعات از جدول ها را سریعتر میکنند اما نوشتن در جدول کندتر خواهد بود.
این روش همیشه نمیتواند نتیجه خوبی داشته باشد. زیرا ممکن است با بروزرسانی هسته وردپرس، شاخصهای اضافی در آن ایجاد شود.
یا ممکن است با اضافه کردن یک شاخص، سرعت اجرای سایر کوئریها کند شود.
راه سوم: کش نتایج کوئری
راه بعدی در مقابله با کوئری های کند در دیتابیس وردپرس این است که به جای تغییر دادن کوئری، تنها نتایج کوئری ذخیره شوند.
با اعمال این محدودیت روی اجرای کوئری، یک گذرگاه آزاد دریافت خواهیم کرد.
برای اینکار میتوانیم از Transients API وردپرس استفاده کنیم.
نمونه ای از ذخیره یک نتیجه کوئری آورده شده:
if ( false === ( $results = get_transient( ‘transient_key_name’ ) ) ) { $results = …; // Do the slow query to get the results here // 60 * 60 is the expiration in seconds – in this case, 3600 seconds (1 hour) set_transient( ‘transient_key_name’, $results, 60 * 60 ); }
ذخیره کردن نتیجه کوئری بالا نشان خواهد داد که این کوئری در هر یک ساعت انجام خواهد گرفت یا خیر.
در صورت وجود یک کوئری که نتایج آن اغلب ثابت است، استفاده از گذرگاهها میتواند راه حل مناسبی باشد.
این روش نسبت به دو روش قبل عوارض کمتری دارد زیرا هم در کوئری تغییری ایجاد نمی کند و هم در دیتابیس تغییری لحاظ نخواهد شد.
حرف آخر
در این مقاله از وستا سرور به آموزش نحوه جستجو و رفع کوئریهای کند در دیتابیس وردپرس پرداختیم. امیدواریم این مقاله برای شما مفید واقع شده باشد.
توجه داشته باشید که ما در این مقاله بیشتر تلاشمان بر این بود که شما را با نحوه یافتن کوئری های کند موجود در دیتابیس وردپرس آشنا کنیم، سپس از بین راه حل های متعددی که برای برطرف کردن این کوئری ها وجود دارد، به معرفی ۳ مورد از آنها پرداختیم اما ممکنه راه های ديگري برای رفع کوئری های کند بکار شما بیاد.