پایگاه داده بهینه‌سازی وبسایت
پاکسازی جدول wp_options و بارگذاری خودکار داده

پاکسازی جدول wp_options و بارگذاری خودکار داده

یکی از تکنیکهای اساسی و پایه ای جهت بهینه سازی وردپرس، پاکسازی جدول wp_options و بارگذاری خودکار داده در این جدول است.

پیش از بررسی موضوع بحث بهتر است کمی با این جدول و محتویات آن آشنا شویم.

جدول wp_options چیست؟

جدول wp_options یکی از جداول پایه ای وردپرس است.

محتویات این جدول:

  1. آدرس URL سایت، آدرس صفحه اول سایت، ایمیل مدیر سیستم، دسته بندی پیشفرض، تعداد پست های هر صفحه، فرمت (قالب) زمان و …
  2. تنظیمات پلاگین ها، قالب ها (themes)، ابزارک ها (ویجت ها)
  3. داده هایی که بصورت موقت ذخیره می شوند

فیلدهای جدول wp_options

جدول wp_options حاوی فیلدهای زیر است که در مورد عملکردیکی از آنها (autoload) صحبت می کنیم:

  1. option_id
  2. option_name
  3. option_value
  4. autoload

فیلد autoload (بارگذاری خودکار داده)

فیلد autoload می تواند ۲ مقدار داشته باشد:

  1. yes (بله)
  2. no (خیر)

به اصطلاح یک فلگ است که اگر yes باشد باعث می شود رکورد مورد نظر در تمام صفحات سایت (برای تمامی درخواست ها) بارگذاری گردد.

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

بصورت پیشفرض فیلد autoload برای برنامه نویسان yes درنظر گرفته شده است. اما پلاگین های نوشته شده توسط برنامه نویسان وردپرس لازمه نیست در همه جا اطلاعات خود را بارگزاری کنند. و از آنجا که api های وردپرس این اطلاعات را برای ما فراهم می کنند باید به اطلاع آنها رساند که این اطلاعات فقط در هنگام اجرای کد های پلاگین باید بارگذای شوند. از این رو بهتر است مقدار این فیلد no در نظر گرفته شود.

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

  1. اطلاعات برخی پلاگین ها تنها زمانی که نیاز هستند باید بارگزاری شوند. از این رو بهتر است بصورت خودکار بارگذاری نشوند. به عنوان نمونه افزونه فرم ساز تنها اطلاعات خود را در صفحه ارتباط با ما می بایست بارگذاری کند. پس چرا باید کاربر وردپس در صفحات دیگر نیز این بار را تحمل کند؟!
  2. پلاگین حذف شده دیگر نیاز به اطلاعات خود ندارد، ولی داده های این پلاگین در تمام درخواست های وردپرس بارگذاری می شوند. از این رو باید به گونه ای تنظیم شود که این اطلاعات غیرضروری بارگزاری نشوند.
  3. برنامه نویسان وردپرس به جای ایجاد جدول مازاد اطلاعات خود را در جدول wp_options ذخیره می کنند و برای کار خود این استدلال را می آورند که تا جای ممکن باید با امکانات وردپرس نیاز کاربر برآورده شود. اما جدول wp_options جای هزاران داده نیست!

چقدر اطلاعات در جدول wp_options زیاد محسوب می شود؟

این مقدار بستگی به حیطه کاری و شیوه طراحی و برنامه نویسی دارد. منتهی به صورت تقریبی می توان مواردی را بیان کرد.

  1. از ۳۰۰ کیلوبایت تا ۱ مگابایت ، همه چیز خوب است و نیاز نیست به آن توجه نمایید.
  2. از ۳ مگابایت تا ۵ مگابایت، نیاز به بهینه سازی وجود دارد و باید مورد ارزیابی قرار گیرد.
  3. اگر از ۱۰ مگابایت بیشتر باشد بهتر است سریع به حال سیستمتان رسیدگی کنید.

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

عیب یابی جدول wp_options و بارگذاری خودکار داده

اگر متوجه کندی در سایت وردپرسی شدید، یکی از احتمالاتی که باید درنظر بگیرید وجود یک پلاگین قدیمی در سایت وردپرسی است که در تمامی درخواست ها اطلاعات آن بارگزاری می گردد.

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

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

بررسی اندازه داده های Autoload شده

اولین کاری که باید انجام دهید، بررسی اندازه داده های Autoload شده فعلی در سایت وردپرسی است. بدین منظور، وارد phpMyAdmin شوید. سپس ، روی پایگاه داده خود در سمت چپ و بعد از آن روی زبانه SQL کلیک کنید. در نهایت دستور زیر را وارد کرده و کلید “Go” را فشار دهید.

SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload='yes';
بررسی اندازه داده های Autoload شده
بررسی اندازه داده های Autoload شده

پیشوند wp_ را بسته به تنظیمات وب سایت خود تغییر دهید.

autoload_size بر حسب بایت بازگردانی می شود. 1024 بایت ۱ کیلوبایت است و 1024 کیلوبایت ۱ مگابایت می باشد. بنابراین در مثال ما، ۲۵۹۰۲۵ بایت برابر با ۰٫۲۵ مگابایت است. در نتیجه برای این سایت، اندازه autoload شده ها خوب است! اگر مقداری کمتر از 1 مگابایت برگردانده شد، نیازی به نگرانی نیست و نشانه بهینه بودن شایت شما است. اما، اگر نتیجه بزرگتر بود، درادامه شما را با شیوه بهینه سازی اینگونه سایت های وردپرسی آشنا خواهیم کرد.

اندازه autoload
اندازه autoload

در زیر سایتی وجود دارد که ما در حال تست آن بودیم که در آن ۱۳۷۷۲۴۷۱۵ بایت یا به عبارت بهتر ۱۳۷ مگابایت اطلاعات بازگردانی شد.

این سایت نمونه خوبی از سایتی هایی است نیازمند بهینه سازی می باشند. در این سایت حتما ایراد هایی وجود دارد که نیازمند بهینه سازی است.

اندازه autoloaded در جدول wp_options
اندازه autoloaded در جدول wp_options

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

SELECT 'autoloaded data in KiB' as name, ROUND(SUM(LENGTH(option_value))/ 1024) as value FROM wp_options WHERE autoload='yes'
UNION
SELECT 'autoloaded data count', count(*) FROM wp_options WHERE autoload='yes'
UNION
(SELECT option_name, length(option_value) FROM wp_options WHERE autoload='yes' ORDER BY length(option_value) DESC LIMIT 10)

کد بالا اطلاعات زیر را در اختیار شما قرار می دهد.

  1. اندازه داده های Autoload شده
  2. تعداد ردیف های جدول wp_options که Autoload شده هستند
  3. 10 ردیف اول، بر اساس اندازه داده های آنها
10 ردیف اول [جدول بر اساس اندازه داده ها
10 ردیف اول [جدول بر اساس اندازه داده ها

اگر به ابزار New Relic دسترسی دارید (مجوز لازم است)، می‌توانید از آن برای عیب‌یابی جدول wp_options استفاده کنید.

عیب‌یابی جدول wp_options با ابزار New Relic
عیب‌یابی جدول wp_options با ابزار New Relic

تب پایگاه داده به جدول و نوع پرس و جو که بیشترین زمان را صرف می کند اشاره می کند. اگر یکی از ردیف های فهرست را انتخاب کنید، می‌توانید جزئیات بیشتری از جمله چند نمونه پرس و جو را مشاهده کنید. در مثال زیر، می‌توانید ببینید که داده‌ها با انگشت به داده‌های بارگیری خودکار در جدول wp_options اشاره می‌کنند. مطمئناً، یک تجزیه و تحلیل سریع از سایت مورد بحث، نزدیک به 250 مگابایت داده بارگذاری شده خودکار را تأیید کرد.

مرتب سازی داده های Autoload شده – از بالا به پایین

مرحله بعدی مرتب سازی سریع موارد برتر با داده های بارگذاری شده خودکار است. در اینجا یک دستور سریع SQL وجود دارد که می توانید از آن برای فهرست کردن 10 مورد برتر استفاده کنید:

SELECT option_name, length(option_value) AS option_value_length FROM wp_options WHERE autoload='yes' ORDER BY option_value_length DESC LIMIT 10;

بررسی دقیقتر داده های جدول wp_options بصورت مجزا

قدم بعدی، بررسی برخی از داده‌های autoload بالا بود.

301_redirects

همانطور که در بالا مشاهده می کنید گزینه autoloaded بالای لیست301_redirects است. که به احتمال زیاد مربوط به یک افزونه تغییر مسیر در سایت یا افزونه سئو وردپرس است که عملکرد تغییر مسیر نیز دارد. در این مثال، بهترین توصیه این است که در واقع تغییر مسیرها را در سطح سرور پیاده سازی کنید.

چرا؟ زیرا استفاده از افزونه‌های رایگان وردپرس برای پیاده‌سازی تغییر مسیرها گاهی اوقات می‌تواند باعث مشکلات عملکرد شود، زیرا اکثر آنها از تابع wp_redirect استفاده می‌کنند که به اجرای این دستور به منابع اضافی (برای اجرای کد php) نیاز دارد. و البته، داده ها را به صورت خودکار در جدول wp_options بارگذاری می کند.

اگر مشتری وب یار هستید، سایت های طراحی شده توسط وب یار تماما بهینه هستند و تمام لینک های redirect شده توسط وب سرور کنترل می شوند. از طرفی برای مشتریان خدمات بهینه سازی وب سایت نیز این اقدامات انجام میشود.

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

wpurp_custom_template_

گزینه بعدی که به صورت خودکار بارگذاری شد wpurp_custom_template_ بود. ما می‌توانیم ببینیم که چند ردیف مختلف برای این کار وجود دارد. معمولاً باید بتوانید نام این گزینه را پیدا کنید و با جستجو در پوشه تم ها یا افزونه ها، نقاط را به هم متصل کنید. در این مورد، از کاربرد دستور grep روی سرور لینوکسی استفاده کرده تا آن را پیدا کنید. همچنین می توانید آن را از طریق SFTP بررسی کنید.

grep -Ri "wpurp_custom_template_"

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

میتوانید با گوگل کردن wpurp_custom_template_ متوجه شوید که این خطا مربوط به کدامین پلاگین و یا قالب است.

um_cache_userdata_

گزینه بعدی برای داده های خودکار بارگذاری شده um_cache_userdata_ بود. ما می‌توانیم ببینیم که چند ردیف مختلف برای این ردیف وجود دارد.

از آنجایی که um_cache_userdata_ سمت پایین جدول خروجی بود، ما سریع دستور MySQL خود را تغییر دادیم تا 40 داده بالا که به صورت خودکار بارگذاری شده اند را نشان دهیم:

SELECT option_name, length(option_value) AS option_value_length FROM wp_options WHERE autoload='yes' ORDER BY option_value_length DESC LIMIT 40;

یا همه مقادیر را با آن پیشوند جمع کنید:

SELECT 'sum size in KiB', ROUND(SUM(length(option_value))/1024,0) FROM wp_options WHERE autoload='yes' AND option_name like "um_cache_userdata_%"

می‌توانیم ببینیم که ورودی‌های بسیار بیشتری برای um_cache_userdata_ در جدول wp_options وجود دارد. ما دوباره دستور grep را اجرا کردیم تا پلاگین ها و پوشه های قالب خود را بررسی کنیم.

grep -Ri "um_cache_userdata_"

Cron Jobs

یکی دیگر از گزینه های متداول که با حجم بالای داده های خودکار بارگذاری شده می بینیم، cron است. برای پارامتر، می توانید هر چیزی که مربوط به cron باشد. بنابراین کاری که می توانید انجام دهید این است که دکمه «ویرایش» را بزنید تا ببینید چه چیزی باعث آن شده است. در اینجا یک مثال در زیر آمده است که در آن آشکار است که “do_pings” باعث این مشکل شده است. باز هم، یک جستجوی سریع در گوگل راه حلی سریع برای پاکسازی do_pings را نشان داد.

پاکسازی جدول wp_options

اگر بسیاری از مواردی را که در بالا ذکر کردیم مشاهده می کنید، احتمالاً زمان پاکسازی تمام داده های بارگذاری شده خودکار در جدول wp_options فرا رسیده است. همچنین توصیه می شود سعی کنید تعداد ردیف های جدول wp_options را به حداقل برسانید. لطفاً همیشه قبل از حذف داده ها در پایگاه داده خود از نسخه پشتیبان تهیه کنید. اگر خودتان از انجام این کار راحت نیستید، ما همیشه استخدام یک توسعه دهنده وردپرس را توصیه می کنیم. این نیز یک سناریوی خوب است که در آن یک محیط صحنه‌سازی می‌تواند مفید باشد.

همانطور که قبلا انجام دادیم، باید وارد phpMyAdmin شوید. روی پایگاه داده خود در سمت چپ و سپس بر روی زبانه SQL کلیک کنید. سپس دستور زیر را وارد کرده و “Go” را بزنید.

SELECT * FROM `wp_options` WHERE `autoload` = 'yes'

اگر سایت وردپرس شما از پیشوند دیگری غیر از wp_ استفاده می کند، ممکن است مجبور شوید پرس و جوی بالا را تغییر دهید. با این کار تمام داده های جدول wp_options که روی بارگذاری خودکار تنظیم شده است را به شما نشان می دهد.

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

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

بنابراین، در این مورد، کوئری زیر را برای یافتن داده های بارگذاری شده خودکار در جدول wp_options از افزونه Jetpack اجرا می کنیم. برای تغییر پرس و جو با درخواست خود، به سادگی %jetpack% را جایگزین کنید.

SELECT * 
FROM `wp_options` 
WHERE `autoload` = 'yes'
AND `option_name` LIKE '%jetpack%'

سپس می‌توانید تمام ردیف‌ها را انتخاب کرده و روی «حذف» کلیک کنید.

یا می توانید دستور زیر را اجرا کنید:

DELETE
FROM `wp_options` 
WHERE `autoload` = 'yes'
AND `option_name` LIKE '%jetpack%'

سپس می‌توانید برای داده‌های بارگیری خودکار اضافی که از پلاگین‌ها و تم‌ها در جدول wp_options باقی مانده‌اند، آبکشی کرده و تکرار کنید.

پاکسازی Transients

وردپرس رکوردهای گذرا را در جدول wp_options ذخیره می کند مگر اینکه از کش شی استفاده کنید. معمولاً به آنها یک زمان انقضا داده می شود و باید به مرور زمان ناپدید شوند. به هر حال همیشه درست نیست. ما برخی از پایگاه های داده را دیده ایم که در آنها هزاران رکورد گذرا قدیمی وجود دارد. همچنین مهم است که توجه داشته باشید که گذرا به طور پیش فرض به طور خودکار بارگیری نمی شود. می‌توانید از پرس و جوی مانند زیر استفاده کنید تا ببینید آیا داده‌های گذرا بارگیری شده خودکار وجود دارد یا خیر.

SELECT * 
FROM `wp_options` 
WHERE `autoload` = 'yes'
AND `option_name` LIKE '%transient%'

با این حال، یک گزینه بهتر و ایمن تر، استفاده از یک افزونه رایگان مانند Transient Cleaner است که می تواند فقط موارد گذرا منقضی شده را از جدول wp_options پاک کند.

پاکسازی نشست های وردپرس

یکی دیگر از مشکلات رایجی که دیده‌ایم این است که گاهی اوقات کارهای cron هماهنگ نیستند یا به درستی فعال نمی‌شوند و بنابراین جلسات پاکسازی نمی‌شوند. می توانید تعداد زیادی ردیف wp_session را در پایگاه داده خود دریافت کنید. در این مثال زیر سایت مورد نظر با بیش از 3 میلیون ردیف در جدول wp_options خاتمه یافت. و حجم جدول به بیش از 600 مگابایت رسیده بود.

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

SELECT * 
FROM `wp_options` 
WHERE `option_name` LIKE '_wp_session_%'

در بیشتر موارد می‌توانید با دستور زیر با خیال راحت این موارد را حذف کنید (همانطور که یک کار cron باید داشته باشد):

DELETE FROM `wp_options` 
WHERE `option_name` LIKE '_wp_session_%'

همچنین جهش هایی را که سایت در MySQL دریافت می کرد، رفع کرد.

فیلد Autoload را ایندکس کنید

و اگر تمیز کردن جدول wp_options کافی نبود، می‌توانید یک «شاخص» به قسمت بارگذاری خودکار اضافه کنید. این اساساً می تواند به جستجوی مؤثرتر آن کمک کند. تیم فوق‌العاده در 10up سناریوهای آزمایشی را روی جدول wp_options با تعداد معمولی رکوردهای بارگیری شده خودکار انجام دادند تا نشان دهند که چگونه افزودن یک فهرست خودکار به جستارهای wp_options می‌تواند عملکرد را افزایش دهد.

ما همچنین توصیه می کنیم این دو منبع اضافی را از WP Bullet بررسی کنید:

نحوه اضافه کردن MySQL Index به جدول wp_options
تمیز کردن جدول wp_options با استفاده از WP-CLI

برای نکات بهینه‌سازی بیشتر، مطمئن شوید که نگاهی به راهنمای عمیق ما بیندازید: نحوه افزایش سرعت سایت وردپرس (راهنمای نهایی)

صرفه جویی در زمان، هزینه و به حداکثر رساندن عملکرد سایت با:

کمک فوری از کارشناسان میزبانی وردپرس، 24/7.
ادغام Cloudflare Enterprise.
مخاطبان جهانی با 34 مرکز داده در سراسر جهان می‌شوند.
بهینه سازی با نظارت بر عملکرد برنامه داخلی ما.

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

آخرین مطالب تخصصی وب یار

Author

خسرو نظری

دانش آموخته کارشناسی ارشد فناوری اطلاعات (گرایش طراحی و تولید نرم افزار)، توسعه دهنده وب، مدیرپروژه های نرم افزاری، مدیرسیستم (sysadmin) لینوکس، مشاور مانیتورینگ و مدیر مجموعه تحلیل یار

Leave a comment

نشانی ایمیل شما منتشر نخواهد شد.