کار با افزونه Query Monitor برای بررسی ریکوئست های mysql
درک نحوه کار کوئریهای MySQL برای تعامل مؤثر با پایگاه داده بسیار مهم است. کوئری MySQL در واقع یک دستور SQL است که به پایگاه داده اعلام می کند چه عملیاتی انجام دهد.طبق تصویر زیر در نوار بالایی افزونه، اطلاعاتی مهمی دیده میشود:
تصویر(1)
Total time: زمان کلی برای بارگذاری صفحه (شامل زمان اجرای دستورات PHP، MySQL و فراخوانی API ها) را نشان می دهد.
RAM usage: میزان مصرف RAM را بیان می نماید. اگر این مورد زیاد باشد، نشاندهنده اجرای کوئریهایی با دادههای زیاد است.
Total MySQL time: مدت زمانی که صرف واکشی داده از دیتابیس شده است را بیان می کند.
Total queries: تعداد کل کوئریهایی که برای تولید صفحه اجرا شدهاند را بیان می دارد.
بررسی کوئریها بر اساس تعداد سطرها
اگر دیتابیس شما حجم بالایی را به خود اختصاص داده است یا مصرف منابع آن زیاد است، افزونه Query Monitor می تواند کمک شایانی در یافتن دلیل این مشکلات نماید. برای بررسی کوئری ها، پس از نصب و اجرای افزونه، وارد تب Queries شوید و روی عنوان ستون Rows کلیک کنید تا کوئریها بر اساس تعداد ردیف مرتب شوند. بهطور پیشفرض، کوئریها به ترتیبی که اجرا شدهاند نمایش داده میشوند، اما با مرتبسازی بر اساس تعداد ردیف (از بیشترین به کمترین)، میتوانید بهراحتی تشخیص دهید کدام افزونه یا چه بخشی از قالب، اطلاعات زیادی را بارگذاری میکند.
نکته 1: کوئریها را بر اساس تعداد ردیف بررسی نمایید تا دلیل مصرف منابع زیاد را کشف کنید.
تصویر(2)
اگر افزونههایی را شناسایی کردهاید که باعث ایجاد کوئریهایی با سطر زیاد در دیتابیس شما میشوند، سریعترین و آسانترین راه، بررسی تأثیر واقعی این افزونه، غیرفعال کردن آن و بارگیری مجدد صفحه است. تعداد کوئریها، میزان استفاده از RAM و زمان اجرای کل دستورات را قبل و بعد از غیرفعالسازی افزونه با هم مقایسه کنید. این احتمال وجود دارد که خود افزونه یا قالب برای عملکرد وبسایت شما ضروری باشد، پس در این صورت چه باید کرد؟
اولین کاری که باید انجام دهید این است که بررسی نمایید، آیا این بخش از کد به عنوان یک گزینه در تنظیمات افزونه یا قالب وجود دارد یا خیر. اگر بخش مد نظر شما از کد، دارای گزینه مجزا داخل تنظیمات قالب یا افزونه بود، آن را غیرفعال کنید. با این کار عملکرد بهینه افزونه یا قالب را حفظ خواهید نمود.
مثال عملی:
با توجه به تصویر 2، اگر wp_load_alloptions تنها کوئری با نرخ بازگشت بالا باشد، باید جدول wp_options را بهینهسازی کنید. در این تصویر مشاهده می کنید که بسیاری از کوئریها حدود ۱۰۰۰ ردیف دارند. اگر فقط یک یا دو مورد از این نوع کوئریها مشاهده نمودید، مشکل خاصی ایجاد نمیشود اما اگر دهها یا صدها مورد از آنها وجود داشته باشند، باعث مصرف بالای RAM، افزایش زمان بارگذاری صفحات و … خواهند شد.
با در نظر گرفتن مثال بالا و مشکل اغلب کاربران سایت های وردپرسی که نیاز به بهینه سازی جدول wp_options و متغیرهای محصولات ووکامرس خود دارند، در ادامه روش حل این دو مشکل اساسی توضیح داده شده است.
1. بهینه سازی جدول wp_options
جدول wp_options در وردپرس تنظیمات اصلی سایت، پلاگینها و تمها را در خود ذخیره میکند. هر زمان که وردپرس بارگذاری می گردد، این جدول خوانده شده تا پیکربندیهای صحیح در CMS اعمال شوند. اگر دادهای دارای autoload با مقدار «yes» است، پس از هر بار درخواست، بارگذاری می گردد. چنانچه تعداد این نوع داده ها زیاد باشد، زمان پاسخدهی سرور افزایش یافته و تجربه کاربری کاهش می یابد.
1.1 شناسایی دادههای autoloaded با حجم زیاد
منظور از دادههای autoloaded با حجم زیاد در واقع مواردی هستند که در تب Queries ابزار Query Monitor ردیف های زیادی را به خود اختصاص داده اند(تصویر 2).برای شناسایی این کوئری ها در جدول mysql، میتوانید از phpMyAdmin و اجرای یک دستور SQL استفاده کنید.
- در phpMyAdmin، جدول wp_options را باز کرده و برگه "Search" را انتخاب کنید. در ستون "autoload"، مقدار "yes" را فیلتر نمایید.
تصویر(3)
- همچنین میتوانید از کوئری SQL زیر استفاده کنید تا بزرگترین گزینههایی که در هر صفحه بارگذاری میشوند را مشاهده نمایید:
تصویر(4)
این کوئری ۲۰ گزینه را بر اساس اندازه نمایش میدهد.
1.2 پاکسازی ایمن دادههای autoloaded
قبل از پاکسازی کوئری ها در جدول wp_options، ابتدا از پایگاه داده خود طبق آموزش زیر نسخه پشتیبان تهیه کنید. با این کار در صورت بروز مشکل، دادهها را می توانید بازیابی نمایید.
نحوه پشتیبان گیری از دیتابیس و بازگردانی آن
کوئری هایی که به پلاگینها یا تمهای غیرقابل استفاده مرتبط هستند را شناسایی نموده و حذف کنید. برای حذف یک گزینه خاص، میتوانید از دستور SQL زیر استفاده نمایید:
DELETE FROM wp_options WHERE option_name = 'your_option_name';
این کار را با دقت انجام دهید تا از حذف دادههای ضروری جلوگیری شود.
نکته 2: اگر در خصوص عملکرد یک کوئری اطلاعاتی نداشته یا چنانچه دانش کد نویسی ندارید، از حذف اطلاعات اجتناب کرده و این مورد را به یک برنامه نویس بسپارید.
2- بهینه سازی متغیرهای محصولات در ووکامرس
یکی دیگر از مشکلات کاربران که منجر به سنگین شدن دیتابیس MYSQL می شود، بهینه نبودن متغیرهای محصولات در ووکامرس است. در همین راستا، لازم است تا موارد زیر را مد نظر قرار دهید:
-
تعداد آیتمهایی که در هر صفحه از آرشیو نمایش داده میشوند را کاهش دهید. در صورت تمایل میتوانید از اسکرول بینهایت استفاده کنید تا وقتی کاربر صفحه را به پایین میکشد، صفحه دوم بهطور خودکار بارگذاری شود.
-
از افزونه کش مانند راکت استفاده کنید تا تعداد کوئری های در حال اجرا را کاهش دهد.
-
متغیرهای محصولات خود را در صورت امکان به گزینههای محصول (Product Options) تبدیل کنید. متغیرها بهطور پیشفرض در ووکامرس وجود دارند، در حالی که گزینههای محصول این چنین نیستند. اگر متغیرهایی دارید که قیمت و تصویر محصول را نیز تغییر نمیدهند، بهتر است این متغیرها را به گزینههای محصول تبدیل شوند.
مثال: اگر شما تیشرتهایی در رنگها و سایزهای مختلف میفروشید، تغییر رنگ ممکن است تصویر محصول را تغییر دهد، بنابراین این مورد باید متغیر باشد. اما تغییر سایز تصویر را تغییر نمیدهد.
اگر شما ۳۰ رنگ تی شرت و ۸ سایز داشته باشید، تعداد کل متغیرها برای هر محصول برابر است با ۲۴۰ = ۳۰ × ۸. اگر در این حالت سایز را به گزینه محصول تبدیل کنید، فقط ۳۰ متغیر برای هر محصول خواهید داشت. این مورد باعث کاهش مصرف رم خواهد شد.
کشف منابع پرمصرف با افزونه Query Monitor
اگر بهجز موارد بالا، منبع دیگری دارید که باعث ایجاد ردیفهای زیاد در کوئریها میشود، روی آیکن آبی رنگ "+" (شماره1) کلیک کنید تا پشته های فراخوانی شده (شماره2) را مشاهده نمایید. این بخش منبع کوئری را نشان میدهد و اگر توابع نامگذاری مناسبی داشته باشند، میتوانید متوجه شوید کوئریهای سنگین از کجا نشات گرفتهاند.
تصویر(5)
در مثال بالا، یک ردیف با شماره 259 (شماره3) از افزونه et-core-plugin وجود دارد. این افزونه همراه با قالب وبسایت ارائه شده است و از نام توابع فراخوانیشده میتوانید رویت کنید که مشکل از منوی ناوبری نشأت میگیرد.
برای تحلیل بیشتر این موضوع، میتوانید به شماره کوئری در سمت چپ توجه کنید. در تصویر بالا، شماره کوئری پرمصرف، 396 است (شماره4)، بنابراین نگاه کردن به کوئری قبلی (395) اطلاعات بیشتری در مورد دلیل اجرای کوئری پرمصرف به شما خواهد داد. کلیک کردن روی فلش بالای شماره کوئری در ستون سمت چپ، موجب می شود کوئریها دوباره بر اساس ترتیب اجرا، لیست شوند. یا این کار مشاهده خواهید نمود که کدام کوئری قبل از 396 اجرا شده است.
تصویر(6)
در مثال فوق، 18 گزینه در فهرست وجود دارد و به دلیلی نامعلوم 250 ردیف متادیتا درباره این گزینهها ثبت شده است. در این وضعیت، احتمالاً مشکلی وجود ندارد، اما شما میتوانید از همین روش گامبهگام برای شناسایی ریشه هرگونه مشکل احتمالی در عملکرد وبسایتتان استفاده کنید.
بررسی کوئریهای کند
برای بررسی کوئریهای کند، میتوانید از بخش "Overview" و تب "Database Queries" روی "Slow Queries" کلیک کنید. کوئریهای طولانی و کند معمولاً بهراحتی قابل بهینهسازی هستند. اغلب این مشکلات به دلیل نبود ایندکس (index) مناسب ایجاد میشوند.
تصویر(7)