بلاگ ابرینا

چرا حجم جدول wp_options در وردپرس زیاد می‌شود و چطور آن را عیب‌یابی کنیم؟

دلیل اینکه چرا حجم جدول wp_options در وردپرس زیاد می‌شود، معمولاً به انباشته شدن کش‌های موقت منقضی (Transientها)، باقی ماندن تنظیمات افزونه‌های حذف‌شده و ذخیره شدن رکوردهای سنگین در حالت بارگذاری خودکار (Autoload) برمی‌گردد. برای عیب‌یابی ایمن این جدول بدون آسیب زدن به تنظیمات سایت، ابتدا باید در محیط phpMyAdmin با اجرای کوئری‌های SQL، رکوردهای پرحجم و افزونه سازنده هر کدام را شناسایی کنید و سپس فقط داده‌های منقضی و بلااستفاده را پاک‌سازی نمایید.

چرا حجم جدول wp_options در وردپرس زیاد می‌شود و چطور آن را عیب‌یابی کنیم؟

وقتی وارد phpMyAdmin (ابزار مدیریت دیتابیس داخل پنل هاست) می‌شید و می‌بینید حجم جدول wp_options بالا رفته، طبیعیه که نگران کندی سایت بشید. خبر خوب اینه که بزرگ بودن این جدول همیشه مشکل نیست. معمولاً سه عامل پشت رشدش هست: Transientها (کش‌های موقتی که تاریخ انقضا دارن)، داده‌های جامونده از افزونه‌های حذف‌شده و ردیف‌های سنگین Autoload (داده‌هایی که وردپرس هر بار خودکار لود می‌کنه). تو این مقاله قدم‌به‌قدم می‌بینیم حجم جدول wp_options از کجا میاد، چطور بررسیش کنیم و چطور دیتابیس وردپرس رو بدون دست‌زدن به تنظیمات مهم سبک‌تر کنیم.

جدول wp_options در وردپرس چیست و چه کاربردی دارد؟

وردپرس تنظیمات سایت، قالب و افزونه‌ها رو تو جدول wp_options نگه می‌داره. می‌تونید اون رو مثل اتاق فرمان سایت ببینید: وردپرس برای اجرای هر بخش، اول سراغ همین جدول میاد. دیتابیس هر سایت قبل از نصب وردپرس ساخته می‌شه و اگه خودتون ساختیدش، مراحلش تو آموزش ساخت دیتابیس MySQL در هاست اومده. پیشوند جدول‌ها (مثل wp_) هم موقع نصب وردپرس تعیین می‌شه و ممکنه روی سایت شما فرق کنه.

چه اطلاعاتی در جدول wp_options ذخیره می‌شود؟

طبق مستندات رسمی وردپرس درباره Options API، تنظیمات به شکل جفت «نام و مقدار» ذخیره می‌شن؛ نام تو ستون option_name و مقدار تو ستون option_value قرار می‌گیره. معمولاً چهار دسته داده اینجا هست:

  1. تنظیمات هسته وردپرس: مثل آدرس سایت، عنوان و فرمت ساعت.
  2. تنظیمات افزونه‌ها و قالب‌ها: گزینه‌هایی که تو پنل هر کدوم ذخیره می‌کنید.
  3. Transientها: کش‌های موقتی که تاریخ انقضا دارن. اگه کش اشیاء دائمی (Object Cache؛ حافظه‌ی سریعی مثل Redis یا Memcached که داده‌ها رو بیرون از دیتابیس نگه می‌داره) فعال باشه، Transientها معمولاً اونجا ذخیره می‌شن، نه تو این جدول.
  4. کران‌جاب (Cron): فهرست کارهای زمان‌بندی‌شده‌ی وردپرس، مثل بررسی آپدیت‌ها. این ردیف می‌تونه بزرگ بشه، مخصوصاً اگه افزونه‌ای کارهای تکراری بسازه.

جدول wp_options چه تفاوتی با سایر جداول دیتابیس دارد؟

تفاوت اصلی با جدولی مثل wp_posts تو شیوه‌ی خوندنه. نوشته‌ها هم فقط وقتی خونده می‌شن که لازم باشن؛ مثلاً صفحه یا لیستشون نمایش داده بشه. اما wp_options ستونی به اسم autoload داره و ردیف‌هایی که Autoload‌شون فعاله، تقریباً در هر بار باز شدن صفحه از همون اول خونده می‌شن. برای همین، بیشترین اثر روی سرعت معمولاً از ردیف‌های Autoload میاد، نه از کل حجم جدول.

نمای ستون‌های جدول wp_options در phpMyAdmin

چرا حجم جدول wp_options در وردپرس زیاد می‌شود؟

سه عامل باعث رشد واقعی داده‌ها می‌شن: داده‌های یتیم، Transientها و Autoload سنگین. عامل چهارم هم جدا توضیح داده می‌شه: چرا بعد از پاکسازی، عدد حجم کم نمی‌شه (Overhead). جدول زیر فقط یه راهنمای کلیه و اثر واقعی به سایت شما بستگی داره.

نوع دادهمثالاحتمال اثر روی سرعتریسک حذف
Transient منقضی‌شدهردیف‌هایی با پیشوند transientکم تا متوسطکم
داده یتیمتنظیمات افزونه‌ی حذف‌شدهکممتوسط
Autoload سنگینآمار یا گزارش حجیم یک افزونهزیادمتوسط تا زیاد
ردیف cron حجیمکارهای تکراری ساخته‌شده توسط افزونهکم تا متوسطمتوسط

باقی ماندن تنظیمات افزونه‌ها و قالب‌های حذف‌شده

خیلی از افزونه‌ها و قالب‌ها بعد از حذف، ردیف‌های تنظیماتشون رو پاک نمی‌کنن. به این ردیف‌ها «داده یتیم» (Orphaned Data؛ داده‌ای که صاحبش دیگه روی سایت نیست) می‌گن؛ مثل قبض‌های قدیمی که کاربردی ندارن ولی هنوز تو کشو موندن. بعضی افزونه‌ها هم عمداً تنظیمات رو نگه می‌دارن تا اگه دوباره نصب‌شون کردید، همه‌چیز سر جاش باشه. نصب و حذف مداوم افزونه‌ها، ردیف‌های بی‌استفاده‌ی بیشتری جا می‌ذاره.

افزایش تعداد و حجم Transientها در گذر زمان

طبق مستندات رسمی وردپرس درباره Transientها، این داده‌ها برای کش کوتاه‌مدت طراحی شدن. منقضی‌شده‌ها معمولاً هنگام خوانده شدن یا با کار زمان‌بندی‌شده پاک می‌شن، اما ممکنه جا بمونن؛ مثلاً وقتی کران‌جاب درست کار نکنه یا افزونه‌ای مدام ردیف جدید بسازه. Transient بدون تاریخ انقضا هم خودبه‌خود پاک نمی‌شه.

بزرگ شدن بیش از حد مقادیر Autoload

وقتی افزونه‌ای گزارش‌های طولانی، آمار یا آرایه‌های بزرگ رو تو حالت Autoload ذخیره کنه، این داده‌ها تقریباً تو هر درخواست خونده می‌شن، چه لازم باشن چه نه. تو نسخه‌های جدید وردپرس، «سلامت سایت» (Site Health؛ بخش بررسی وضعیت سایت تو پیشخوان) وقتی مجموع Autoload از حدود ۸۰۰ کیلوبایت بیشتر بشه هشدار می‌ده. این عدد فقط آستانه‌ی هشداره و قابل تغییره؛ نه ایده‌آله و نه خط قرمز. روی یک هاست وردپرس با منابع مناسب، خوندن این داده‌ها کمتر حس می‌شه، ولی جایگزین تمیز نگه‌داشتن دیتابیس نیست.

تفاوت حجم داده‌ها با فضای اشغال‌شده فیزیکی جدول

گاهی بعد از پاک کردن هزاران ردیف، حجم جدول wp_options تو phpMyAdmin کم نمی‌شه. چون «حجم واقعی داده‌ها» با «فضای اشغال‌شده روی دیسک» فرق داره. دیتابیس فضای خالی (Overhead) رو معمولاً برای استفاده‌ی بعدی نگه می‌داره، مثل جعبه‌ای که نیمه‌خالیه ولی هنوز همون جای انبار رو گرفته. یه نکته هم هست: ستون Overhead تو بسیاری از سرورها، مخصوصاً با InnoDB (موتور ذخیره‌سازی رایج MySQL)، ممکنه خالی یا غیردقیق باشه؛ پس فقط به اون تکیه نکنید.

چگونه حجم جدول wp_options را در وردپرس بررسی کنیم؟

خب، حالا چطور بفهمیم وضعیت جدول چیه؟ با phpMyAdmin و چند کوئری SQL (دستورهای متنی که از دیتابیس سؤال می‌پرسن یا تغییرش می‌دن) می‌تونید حجم و ردیف‌ها رو بسنجید و ببینید واقعاً انباشت داده دارید یا حجم جدول با نوع سایتتون جوره.

هشدار مهم: دستورهای SELECT فقط اطلاعات رو می‌خونن، اما DELETE، UPDATE و OPTIMIZE داده رو تغییر می‌دن. قبل از هر تغییر، از دیتابیس بکاپ کامل بگیرید. ضمناً تو دستورها پیشوند wp_ رو فرض کردیم؛ اگه پیشوند سایتتون فرق داره، جایگزینش کنید.

بررسی حجم جدول wp_options از طریق phpMyAdmin

برای دیدن حجم جدول wp_options:

  1. وارد کنترل‌پنل هاست (سی‌پنل یا دایرکت‌ادمین) بشید و phpMyAdmin رو باز کنید.
  2. از ستون سمت چپ، دیتابیس سایت وردپرسی‌تون رو انتخاب کنید.
  3. تو ردیف wp_options، ستون Size (حجم جدول) و ستون Overhead (فضای خالی) رو ببینید.

عدد مشخصی برای «حجم نرمال» وجود نداره و به تعداد افزونه‌ها و نوع سایت بستگی داره. اگه تو یه سایت معمولی به صدها مگابایت رسیده، علتش رو بررسی کنید.

روش بدون SQL: تو پیشخوان وردپرس برید به «ابزارها > سلامت سایت». اگه حجم Autoload از آستانه‌ی هشدار بیشتر شده باشه، اینجا پیام می‌بینید. نبودن پیام یعنی از آستانه رد نشده، نه اینکه جدول حتماً تمیزه.

شمارش رکوردهای جدول با اجرای دستور SQL

گاهی حجم کل جدول زیاد نیست، ولی تعداد ردیف‌ها زیاده و کوئری‌ها کند می‌شن. کوئری‌های طولانی منابع سرور رو هم درگیر می‌کنن و تفاوت PHP Worker و Entry Process (دو سقف مختلف برای تعداد درخواست‌های هم‌زمان روی هاست) نشون می‌ده این سقف‌ها چطور کار می‌کنن. برای شمارش ردیف‌ها، تو سربرگ SQL این دستور رو اجرا کنید:

sql

SELECT COUNT(*) FROM wp_options;

تعداد ردیف‌ها تو سایت‌های مختلف خیلی فرق می‌کنه. اگه چند ده هزار ردیف دیدید، یکی از احتمال‌ها جمع شدن Transient یا داده‌ی افزونه‌هاست، ولی این نشانه‌ی قطعی نیست.

پیدا کردن رکوردهای حجیم در wp_options

این کوئری ۲۰ ردیف پرحجم رو نشون می‌ده:

sql

SELECT option_name, LENGTH(option_value) AS option_value_length, autoload
FROM wp_options
ORDER BY option_value_length DESC
LIMIT 20;

ستون option_value_length اندازه‌ی هر مقدار رو به بایت نشون می‌ده (۱۰۴۸۵۷۶ بایت تقریباً یک مگابایته) و ستون autoload مشخص می‌کنه ردیف خودکار لود می‌شه یا نه. مقدارهای yes، on، auto و auto-on یعنی بارگذاری می‌شه؛ no، off و auto-off یعنی بارگذاری نمی‌شه (مقدارهای جدیدتر از وردپرس ۶.۶ به بعد اضافه شدن). برای دیدن مجموع حجم Autoload هم این کوئری رو بزنید:

sql

SELECT SUM(LENGTH(option_value)) AS autoload_bytes
FROM wp_options
WHERE autoload IN ('yes', 'on', 'auto', 'auto-on');
بررسی رکوردهای بزرگ wp_options با دستور SQL در phpMyAdmin

چگونه علت اصلی افزایش حجم wp_options را پیدا کنیم؟

برای پیدا کردن دلیل بالا رفتن حجم جدول wp_options، باید بفهمید صاحب هر ردیف حجیم کیه. تشخیص درست، جلوی پاک شدن اشتباهی تنظیمات مهم رو می‌گیره.

چگونه تشخیص دهیم هر رکورد متعلق به کدام افزونه است؟

بیشتر افزونه‌ها اول نام رکوردهاشون (option_name) یه پیشوند مشخص می‌ذارن. مثلاً ردیف‌های woocommerce_ معمولاً مال ووکامرس و ردیف‌های wpseo_ مربوط به یواست سئو هستن. اگه از اسم رکورد نتونستید افزونه رو شناسایی کنید، اسمش رو تو گوگل جست‌وجو کنید یا تو فایل‌منیجر هاست، پوشه wp-content/plugins رو بگردید.

چگونه داده‌های باقی‌مانده و غیرضروری را شناسایی کنیم؟

دیدن اسم یک افزونه تو جدول، دلیل کافی برای حذف ردیفش نیست. اول مطمئن بشید اون افزونه واقعاً از سایت حذف شده. بعضی افزونه‌های جانبی (مثل مکمل‌های ووکامرس) به رکوردهای هم وابسته‌ان.

لیست بزرگ‌ترین رکوردها رو با افزونه‌های فعال و نصب‌شده‌ی سایتتون مقایسه کنید. رکوردی که مال افزونه‌ی حذف‌شده‌ی مطمئنه، یا پیشوند transient داره و منقضی شده، معمولاً جزو داده‌های غیرضروریه.

چه زمانی افزایش حجم جدول نشانه مشکل نیست؟

معمولاً نگران‌کننده نیست وقتی:

  • سایت بزرگیه (مثلاً فروشگاه) و ده‌ها افزونه فعال داره.
  • رکوردهای پرحجم مال افزونه‌های فعال‌ان.
  • حجم Autoload باعث کندی صفحات نشده.

ولی بیشتر بررسی کنید اگه:

  • «سلامت سایت» درباره حجم Autoload هشدار می‌ده.
  • پنل مدیریت وردپرس کند شده.
  • ردیف‌های بسیار سنگین تو لیست بالاست.
  • تعداد ردیف‌ها مدام و بدون دلیل روشن بیشتر می‌شه.

چگونه حجم اضافی جدول wp_options را پاکسازی کنیم؟

برای پاکسازی ایمن حجم جدول wp_options، به‌جای حذف بی‌هدف ردیف‌ها، فقط سراغ Transientهای منقضی و تنظیمات افزونه‌های حذف‌شده برید. قبل از شروع این چهار نکته رو رعایت کنید:

  • از دیتابیس بکاپ کامل بگیرید و اگه می‌تونید، اول روی Staging (کپی جدا از سایت اصلی برای آزمایش بی‌خطر) تست کنید.
  • مقدار هر ردیفی که می‌خواید حذف کنید رو قبلش کپی یا اکسپورت کنید.
  • به گزینه‌های هسته‌ای مثل siteurl، home و active_plugins دست نزنید.
  • اگه رکورد سنگین مال یه افزونه‌ی فعاله، اول از گزینه‌ی پاک‌سازی خود افزونه استفاده کنید.
اقدامچه زمانی مناسب استریسکنکته
حذف Transient منقضیتعداد زیادی ردیف منقضی داریدکمبا بکاپ شروع کنید
حذف داده یتیممطمئنید افزونه حذف شدهمتوسطقبلش مقدار را اکسپورت کنید
غیرفعال کردن Autoload سنگینردیف مربوط به افزونه فعال استمتوسطمقدار قبلی را یادداشت کنید
OPTIMIZE TABLEحجم زیادی پاک کرده‌ایدکم تا متوسطساعت کم‌بازدید اجرا کنید

پاک‌سازی ایمن Transientهای منقضی‌شده

پاک کردن Transientهای منقضی معمولاً کم‌ریسک‌ترین قدمه، چون زمان استفاده‌ی این داده‌ها تموم شده. کوئری زیر فقط Transientهای منقضی رو پاک می‌کنه، نه فعال‌ها، و برای Transientهای معمولی تو سایت تک‌سایته. تو مولتی‌سایت (جدول‌هایی مثل wp_2_options) و برای Site Transientها (با پیشوند site_transient) فرق داره و باید جدا بررسی بشه.

sql

DELETE a, b FROM wp_options a, wp_options b
WHERE a.option_name LIKE '\_transient\_%'
AND a.option_name NOT LIKE '\_transient\_timeout\_%'
AND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )
AND b.option_value < UNIX_TIMESTAMP();

مدیریت تنظیمات باقی‌مانده افزونه‌های حذف‌شده

وقتی مطمئن شدید ردیفی مال افزونه‌ایه که حذفش کردید و چیز دیگه‌ای بهش وابسته نیست، می‌تونید پاکش کنید. مقدار ردیف رو قبلش اکسپورت کنید و تو دستور زیر، old_plugin_option رو با نام دقیق رکورد عوض کنید:

sql

DELETE FROM wp_options WHERE option_name = 'old_plugin_option';

بررسی و مدیریت گزینه‌های Autoload حجیم

حذف مستقیم ردیف‌های Autoload افزونه‌های فعال ریسک بالایی داره و ممکنه تنظیمات اون افزونه از بین بره. اگه رکورد سنگین مال افزونه‌ی فعاله ولی لازم نیست همیشه لود بشه، غیرفعال کردن Autoload معمولاً امن‌تره؛ هرچند ممکنه افزونه هنگام نیاز اون رو جداگانه از دیتابیس بخونه. این کار می‌تونه به کاهش زمان پاسخ‌گویی سرور وردپرس (TTFB) کمک کنه (TTFB یعنی مدتی که طول می‌کشه مرورگر اولین بخش پاسخ سرور رو بگیره). مقدار ‘no’ تو همه‌ی نسخه‌ها کار می‌کنه:

sql

UPDATE wp_options SET autoload = 'no' WHERE option_name = 'heavy_option_name';

آیا اجرای دستور OPTIMIZE TABLE ضروری است؟

حذف ردیف‌ها به‌تنهایی همیشه فضای دیسک رو کم نمی‌کنه. طبق مستندات MySQL درباره OPTIMIZE TABLE، این دستور روی InnoDB جدول رو بازسازی می‌کنه تا فضای خالی بین داده‌ها جمع بشه. اگه پیام «Table does not support optimize, doing recreate + analyze instead» دیدید، خطا نیست؛ فقط همین بازسازی رو نشون می‌ده. فضا هم همیشه کامل به سیستم‌عامل برنمی‌گرده. اجرای این دستور همیشه لازم نیست؛ فقط وقتی حجم زیادی پاک کردید و دنبال آزاد شدن فضا هستید، ترجیحاً تو ساعت‌های کم‌بازدید، چون جدول ممکنه کوتاه‌مدت درگیر بشه.

sql

OPTIMIZE TABLE wp_options;
مراحل عیب‌یابی و پاکسازی جدول wp_options در وردپرس

مسیر پیشگیری از بزرگ شدن دوباره دیتابیس وردپرس

با چند عادت ساده می‌تونید جلوی بزرگ شدن دوباره‌ی حجم جدول wp_options رو بگیرید.

بررسی دوره‌ای رکوردهای حجیم و داده‌های Autoload

  • هر چند ماه یک‌بار «ابزارها > سلامت سایت» رو ببینید.
  • بعد از بهینه‌سازی، سرعت صفحات رو چک کنید؛ شاخصی مثل LCP (زمان نمایش بزرگ‌ترین بخش محتوای صفحه) رو می‌تونید با آموزش بهبود LCP در وردپرس پیگیری کنید.

مدیریت اصولی نصب و حذف افزونه‌های وردپرسی

  • افزونه‌های جدید رو اول روی سایت آزمایشی تست کنید.
  • موقع حذف افزونه، تنظیمات خودش رو نگاه کنید؛ خیلی از افزونه‌ها گزینه‌ی «پاک کردن کامل داده‌ها هنگام حذف» دارن.

سوالات متداول درباره حجم جدول wp_options

۱. جدول wp_options در وردپرس چیست و چه کاربردی دارد؟

جدول wp_options یکی از جدول‌های اصلی دیتابیس وردپرسه که تنظیمات سایت، قالب و افزونه‌ها، کارهای زمان‌بندی‌شده و معمولاً Transientها توش نگه‌داری می‌شه.

۲. تفاوت حجم جدول wp_options با حجم Autoload چیست؟

حجم جدول، کل فضای اشغال‌شده‌ی ردیف‌هاست؛ حجم Autoload فقط مجموع ردیف‌هاییه که خودکار در بارگذاری صفحات خونده می‌شن.

۳. حجم Autoload در وردپرس چقدر باید باشد؟

عدد قطعی وجود نداره. ۸۰۰ کیلوبایت فقط آستانه‌ی هشدار «سلامت سایت» تو نسخه‌های جدیده، نه عدد ایده‌آل یا خط قرمز. هرچی Autoload سبک‌تر باشه، معمولاً بهتره.

۴. آیا با حذف افزونه، تنظیمات آن هم از دیتابیس پاک می‌شود؟

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

۵. آیا پاک‌سازی wp_options و حذف گزینه‌های Autoload باعث افزایش سرعت سایت می‌شود؟

اگه کندی از ردیف‌های سنگین Autoload باشه، سبک کردن اون‌ها می‌تونه کمک کنه. اما حذف ردیف‌های بدون Autoload معمولاً اثر محسوسی روی سرعت نداره و بیشتر به کم شدن حجم دیتابیس و بکاپ کمک می‌کنه.

۶. آیا اجرای OPTIMIZE TABLE حجم دیتابیس را کاهش می‌دهد؟

این دستور خودش ردیفی حذف نمی‌کنه. اما اگه قبلاً ردیف‌های اضافه رو پاک کرده باشید، با بازسازی جدول می‌تونه فضای خالی (Overhead) رو کم کنه؛ هرچند فضا همیشه کامل به سیستم‌عامل برنمی‌گرده.

جمع‌بندی: حجم جدول wp_options را بشناسید، بعد کمش کنید

حجم جدول wp_options معمولاً به‌خاطر Transientهای جامونده، داده‌های یتیم افزونه‌های حذف‌شده و ردیف‌های سنگین Autoload بالا می‌ره؛ ولی بالا بودنش به‌تنهایی همیشه مشکل نیست. خلاصه‌ی کار:

  • اول بسنجید: حجم جدول، تعداد ردیف‌ها و مجموع Autoload.
  • مالک رکوردهای حجیم رو پیدا کنید و فقط داده‌های مطمئنِ بی‌استفاده رو، بعد از بکاپ، حذف کنید.
  • برای Autoload سنگینِ افزونه‌ی فعال، غیرفعال کردن رو به حذف ترجیح بدید؛ OPTIMIZE TABLE هم در صورت نیاز.
  • با بررسی دوره‌ای و مدیریت اصولی افزونه‌ها، کاهش حجم wp_options رو پایدار نگه دارید.

با همین چند عادت ساده، دیتابیس وردپرس مرتب‌تر می‌مونه و می‌تونه به بهتر شدن سرعت هم کمک کنه.