رفع مشکل افزایش حجم جدول wp_options
یکی از مشکلات رایج در سایتهای وردپرسی، افزایش حجم جدول wp_options است که میتواند منجر به کندی سایت، مصرف بیش از حد منابع هاست و حتی خرابی عملکرد سایت شود. این مشکل میتواند عملکرد سایت شما را مختل کند. معمولا در پروژه های مختلف با سایت های فروشگاهی مواجه میشویم که با مشکل حجیم شدن جدول wp_options روبرو شده اند. علت اصلی این اتفاق استفاده از افزونه های نال یا کرک شده ، عدم بروزرسانی افزونه های سایت بصورت منظم و هک شدن سایت میباشد.
در این مقاله آموزشی به بررسی کامل علتها، نحوه تحلیل و روشهای پاکسازی و بهینهسازی این جدول میپردازم. تمام نکات ارائه شده بصورت تجربی میباشد و در پروژه های مختلف تست شده است. پیشنهاد میشود درصورتیکه دانش فنی لازم را ندارید ، این مورد را به ما بسپارید تا بصورت تخصصی اقدامات لازم در سریع ترین زمان ممکن برای شما انجام گردد.
جدول wp_options چیست؟
جدول wp_options بخشی از پایگاه داده وردپرس است که تنظیمات سایت و افزونهها را ذخیره میکند. این جدول حاوی مواردی مانند:
- تنظیمات عمومی سایت
- دادههای ذخیره شده توسط افزونهها
- مقادیر موقتی (transients)
- اطلاعات مربوط به کش (cache)
- و گزینههای سفارشی
چرا جدول wp_options حجیم میشود؟
همانطور که در ابتدای آموزش گفتم ، دلایل مختلفی میتواند این مشکل را برای شما بوجود آورد که در ادامه بصورت کامل هر یک را توضیح خواهم داد.
| علت | توضیح |
|---|---|
| افزونههای ضعیف از نظر بهینهسازی | افزونههایی که اطلاعات زیادی در wp_options ذخیره میکنند بدون پاکسازی |
| ذخیره مقادیر موقتی (Transients) منقضیشده | بسیاری از افزونهها مقادیر موقتی برای کش ایجاد میکنند اما آنها را پس از انقضا حذف نمیکنند. |
| وجود افزونههای نال یا کرک شده | افزونههایی که بصورت غیراورجینال تهیه و استفاده میشوند باعث ایجاد مشکل در دیتابیس میشود. |
| افزونههای غیرفعال یا حذفشده | دادههای مربوط به افزونهای که حذف یا غیرفعال شده ولی هنوز در پایگاه داده باقی مانده است. |
| استفاده نادرست از autoload = yes | اطلاعات غیرضروری با لود خودکار هنگام بارگذاری هر صفحه سایت |
بررسی حجم جدول wp_options
برای شروع باید بدانید چقدر از حجم دیتابیس به این جدول اختصاص دارد.
روش اول: از phpMyAdmin
- وارد phpMyAdmin شوید.
- پایگاه داده سایت را انتخاب کنید.
- جلوی wp_options مقدار “Size” را ببینید.
روش دوم: از خط فرمان MySQL
SELECT table_name AS "Table", ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)" FROM information_schema.TABLES WHERE table_schema = "نام_پایگاه_داده" AND table_name = "wp_options";
بررسی رکوردهای Autoload در جدول wp_options
ورود مقادیر زیاد بهصورت autoload باعث میشود وردپرس در هر درخواست HTTP این دادهها را لود کند، حتی اگر نیازی به آنها نباشد. این مقادیر معمولا بدلیل استفاده از افزونه های مشکل ساز یا ناسازگار با سایت و هاست شما ایجاد میشوند.
مشاهده مقدار کل autoload شدهها:
SELECT SUM(LENGTH(option_value)) AS autoload_size FROM wp_options WHERE autoload = 'yes';
مشاهده سنگینترین autoload ها:
SELECT option_name, LENGTH(option_value) AS size FROM wp_options WHERE autoload = 'yes' ORDER BY size DESC LIMIT 20;
حذف ترنزینتهای منقضیشده (Expired Transients)
حذف دستی از SQL:
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%';
یا حذف فقط منقضیشدهها:
DELETE FROM wp_options
WHERE option_name LIKE '_transient_%'
AND option_name IN (
SELECT option_name FROM wp_options
WHERE option_name LIKE '_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP()
);
هشدار: حتماً از دیتابیس خود پشتیبان (Backup) بگیرید.
بهینه سازی جدول wp_options
پس از حذف دادههای غیرضروری، بهتر است جدول wp_options را بهینهسازی کنیم. برای این کار نیاز هست ابتدا وارد phpmyadmin شوید و دیتابیس مدنظرتون را انتخاب کنید.
- سپس روی جدول wp_options کلیک کنید.
- از پایین صفحه روی گزینه Optimize table کلیک کنید.
یا از طریق تب SQL ، دستور زیر را اجرا کنید:
OPTIMIZE TABLE wp_options;
توجه: درصورتیکه شما پیشوند حداول دیتابیس خود را بدلایل امنیتی از _wp به مورد دیگری تغییر داده اید ، نیاز هست این پیشوند را در دستوراتی که در کل آموزش اعلام میشود تغییر دهید. به عنوان مثال اگر شما پیشوند _htwq را برای کل دیتابیس خود انتخاب کردید ، حدول پیشفرض wp_options شما با نام جدید htwq_options خواهد بود.
رفع مشکل حجیم شدن wp_options با استفاده از افزونه
1. نصب افزونه بهینه سازی دیتابیس
2. پایش افزونههای نصبشده
- افزونههای ناشناس یا بیکیفیت را حذف کنید.
- بررسی کنید که کدام افزونهها مقادیر زیادی Autoload میسازند.
3. ایجاد کرون جاب برای پاکسازی خودکار ترنزینتها
برای این کار نیاز هست وارد کنترل پنل هاست خود شوید. سپس وارد فایل منیجر شده و به بخش public_html>wp-content>themes شده و فولدر قالب خود را انتخاب کنید. سپس فایل functions.php را ادیت کرده و کد زیر را به انتهای این فایل اضافه کنید.
add_action('wp_loaded', function () {
global $wpdb;
$wpdb->query("
DELETE FROM {$wpdb->options}
WHERE option_name LIKE '_transient_%'
AND option_name NOT LIKE '_transient_timeout_%'
");
});
این کد را بهتر است به صورت کرونجاب هفتگی اجرا کنید، نه در هر بار بارگذاری.
بررسی زمان پاسخ دیتابیس
اگر جدول wp_options حتی پس از پاکسازی هنوز سنگین است، زمان لود شدن صفحات را با افزونههایی زیر بررسی کنید. اگر کوئریهای سنگین از این جدول میآیند، باید به فکر بازنویسی عملکرد افزونهها باشید.
- Query Monitor
- Debug Bar
پاکسازیهای مرتبط با افزونهها
۱. پاکسازی جدول دیتابیس لایتاسپید
افزونه LiteSpeed Cache دادههایی برای کش، صفحه، object cache، و transients در دیتابیس ذخیره میکند. برخی از این دادهها در جدول wp_options یا جداول خاص لایتاسپید ثبت میشوند.
نحوه پاکسازی:
- وارد پیشخوان وردپرس شوید.
- از منوی LiteSpeed Cache روی Toolbox (جعبه ابزار) کلیک کنید.
- به تب Database (پایگاه داده) بروید.
در اینجا گزینههایی برای پاکسازی خواهید دید:
| گزینه | توضیح |
|---|---|
| Clean All | تمام بخشها را پاکسازی میکند. شامل Revision، Trash، Transients |
| Clean Transients | پاکسازی دادههای گذرا، شامل _transient_* از wp_options |
| Clean LSCACHE | حذف دادههای کش افزونه |
| Optimize Tables | اجرای دستور OPTIMIZE TABLE روی تمام جداول |
این تنظیمات کمک میکند دادههای اضافی لایتاسپید و سایر افزونهها پاکسازی شوند. پیشنهاد میشود پاکسازی به صورت دستی یا زمانبندی شده انجام شود.
۲. بهینهسازی دیتابیس با افزونه WP-Optimize
افزونه قدرتمند برای پاکسازی و بهینهسازی پایگاه داده است و عملکرد خوبی در اجرای فرایند بهینه سازی دیتابیس ایفا میکند.
جهت نصب و استفاده از افزونه نیاز هست مراحل زیر را سپری کنید:
- افزونه WP-Optimize را از مخزن وردپرس نصب و فعال سازی کنید.
- سپس از منوی سمت راست وارد WP-Optimize > Database شوید.
- حالا میتوانید روند بهینه سازی دیتابیس را انجام دهید. فقط گزینههایی را انتخاب کنید که مطمئن هستید باعث از دست رفتن دادههای مهم نمیشوند.
مهمترین قابلیت های افزونه WP-Optimize:
| گزینه | توضیح |
|---|---|
| Clean all post revisions | پاکسازی ویرایشهای قدیمی پستها |
| Clean all auto-draft posts | پاکسازی پیشنویسهای خودکار |
| Remove spam and trashed comments | حذف نظرات اسپم و حذفشده |
| Remove transient options | پاکسازی Transients |
| Optimize database tables | اجرای دستور OPTIMIZE TABLE |
۳. پاکسازی دادههای گذرا (transients) ووکامرس
ووکامرس به صورت گسترده از ترنزینتها برای کش کردن قیمت، موجودی، و صفحات استفاده میکند. این قابلیت باعث ایجاد حجم وسیعی در جدول wp_options میشود.
مراحل پاکسازی دادههای گذرا (transients) ووکامرس:
- وارد پیشخوان وردپرس شوید.
- به مسیر ووکامرس > وضعیت > ابزارها (WooCommerce > Status > Tools) بروید.
- سپس میتوانید از طریق ابزارهای مرتبط با پاکسازی که در ادامه معرفی میشود ، نسبت به پاکسازی ترنزینتها در ووکامرس اقدام کنید.
- اجرای این موارد به رفع مشکل حجم اضافی wp_options کمک میکند.
| ابزار | عملکرد |
|---|---|
| Clear transients | پاکسازی دادههای گذرای معمولی |
| Clear expired transients | پاکسازی دادههای گذرای منقضیشده |
| Clear customer sessions | حذف سشنهای مشتریان |
| Regenerate product lookup tables | بازسازی دادههای ایندکس محصولات |
مشکلات افزونههای وردپرسی در افزایش حجم جدول wp_options
۱. باگ افزونه امنیت کامل وردپرس (All In One WP Security)
در برخی نسخهها وقتی ReCAPTCHA فعال میشود، ورودیهای زیادی از نوع _aiowps_login_failed_attempts یا مشابه آن به صورت ترنزینت در جدول wp_options ثبت میشود و به دلایلی حذف نمیشوند. این مورد باعث میشود که حجم دیتابیس چندین برابر شود. در برخی پروژه ها مشاهده شده که این موارد تا 2 گیگ به حجم دیتابیس اضافه کرده است. نشانههای وجود مشکل را در ادامه توضیح خواهم داد:
- جدول wp_options به شدت بزرگ میشود
- افزایش زمان لود صفحات سایت
- مقادیر با autoload = yes ذخیره میشوند که باعث کندی شدید میشود
- کندی پنل مدیریت وردپرس
راهحل رفع باگ افزونه امنیت کامل وردپرس:
- غیرفعال کردن موقت ReCAPTCHA از تنظیمات افزونه امنیت کامل.
- بررسی و اصلاح نسخه افزونه (بروزرسانی یا جایگزینی)
- اجرای این دستور SQL برای حذف دادههای مشکلساز:
DELETE FROM wp_options WHERE option_name LIKE '%aiowps%' AND autoload = 'yes';
درصورتیکه با دستور بالا این داده ها حذف نشدند ، نیاز هست این اقدام بصورت دستی انجام شود که بسیار زمان بر هست و باتوجه به حساسیت موضوع ، نیاز هست این اقدام توسط یک متخصص وردپرس انجام گردد.
۲. باگ افزونه LiteSpeed Cache
در برخی از نسخههای LiteSpeed Cache، دادههای cache یا transients مثل موارد زیر در جدول wp_options به صورت حجیم ذخیره میشوند و پاکسازی خودکار ندارند.
- _transient_litespeed_cache_object_…
- _transient_timeout_litespeed_cache_object_…
علت این مشکل میتواند شامل موارد زیر باشد:
- Object cache در سرور فعال نیست، اما LiteSpeed Cache همچنان داده ذخیره میکند
- پاکسازی دورهای transients تنظیم نشده است
راهحل رفع باگ افزونه LiteSpeed Cache:
در تنظیمات افزونه LiteSpeed:
- به مسیر LiteSpeed Cache > Cache > Object بروید.
- اگر از object cache استفاده نمیکنید، آن را غیرفعال کنید.
یا
- از تب افزونه لایت اسپید کش به بخش جعبه ابزار > تب دیتابیس رفته و گزینه Clean Transients را بزنید.
- اگر لازم است بهصورت دستی دستور SQL زیر را اجرا کنید:
DELETE FROM wp_options WHERE option_name LIKE '_transient_litespeed_cache%' OR option_name LIKE '_transient_timeout_litespeed_cache%';
درصورتیکه با دستور بالا این داده ها حذف نشدند ، نیاز هست این اقدام بصورت دستی انجام شود که بسیار زمان بر هست و باتوجه به حساسیت موضوع ، نیاز هست این اقدام توسط یک متخصص وردپرس انجام گردد.
آنالیز و تعمیر دیتابیس در phpMyAdmin
درصورتیکه تمام موارد بالا را بدرستی و با دقت انجام داده باشید، بایستی مشکل شما حل شده باشد. درصورتیکه همچنان مشکل حجیم شدن دیتابیس وجود دارد، این احتمال وجود دارد که روند را درست انجام داده باشید اما همچنان این تغییرات شناسایی نشده باشند. به همین منظور نیاز هست یکبار روند آنالیز ، چک سام و یا تعمیر را طبق روش زیر انجام دهید. برای بررسی و ترمیم جداول دیتابیس آسیبدیده یا حجیم وارد phpMyAdmin شوید:
- دیتابیس مربوط به وردپرس را باز کنید.
- تیک جدول wp_options را بزنید
- از منوی کشویی پایین صفحه میتوانید یکی یکی گزینه های زیر را انتخاب کنید.
| گزینه | توضیح |
|---|---|
| Check Table | بررسی ساختار جدول از نظر خطا |
| Analyze Table | بررسی آماری برای بهینهسازی کوئریها |
| Repair Table | ترمیم جدول آسیبدیده |
| Optimize Table | کاهش فضای مصرفی و بهبود عملکرد (معادل OPTIMIZE TABLE) |
پیشنهاد: Repair را فقط در صورت مشاهده خطا اجرا کنید.
نتیجهگیری
افزایش حجم دیتابیس علی الخصوص جدول wp_options میتواند مشکلات متعددی از جمله کندی شدن سایت و بروز خطاهای مختلف در سایت را بوحود آورد. در این مطلب سعی شد تا بصورت کامل و با زبانی ساده به نحوه رفع مشکل افزایش حجم جدول wp_options بپردازم تا بتوانید به راحتی این مشکل را در سایتتون رفع کنید و نیازی به صرف هزینه در این زمینه نداشته باشید. امیدوارم این آموزش برای شما مفید بوده باشد و بتوانید به خوبی از این آموزش استفاده کنید. در ادامه خلاصه ایی از مباحثی که مطرح شد را جهت یاداوری بیان میکنم تا درک عمیق تری از موضوعات اعلام شده داشته باشید.
- همیشه قبل از هرگونه دستکاری در دیتابیس، نسخه پشتیبان تهیه کنید.
- هر از چند وقت یکبار دیتابیس را بهصورت دستی یا خودکار پاکسازی و بهینهسازی کنید.
- از افزونههایی استفاده کنید که در مدیریت ترنزینتها و بهینهسازی دیتابیس عملکرد خوبی دارند.
| مشکل | راهحل سریع |
|---|---|
| حجم زیاد wp_options | پاکسازی ترنزینتها و تنظیم Autoload |
| باگهای افزونهها | شناسایی دادههای تکراری و حذف دستی |
| کندی دیتابیس | Repair, Analyze, Optimize از phpMyAdmin |
| افزونه LiteSpeed یا AIOS | بررسی تنظیمات کش و غیرفعالسازی ویژگی مشکلساز |
پیشنهاد میکنم سایر مطالب در زمینه آموزش وردپرس را در وبلاگ من مشاهده کنید. اگر سوال یا ابهامی در رابطه با آموزش داشتید حتما در بخش دیدگاهها اعلام کنید تا در کمترین زمان ممکن پاسخگوی شما باشم. موفق باشید