دیتابیس وردپرس خودش را تمیز نمی‌کند: هر ویرایش یک رونوشت می‌سازد، افزونه‌ها داده‌ی موقت می‌گذارند و بعد از حذف هم ردشان می‌ماند. پاک‌سازی دوره‌ای حجم بکاپ را کم می‌کند، ولی چیزی که واقعاً روی سرعت اثر دارد «autoload» است: داده‌هایی از جدول options که در هر بار باز شدن هر صفحه خوانده می‌شوند. اگر این بخش چند مگابایت شده باشد، کل سایت کند می‌شود. قبل از هر پاک‌سازی، از دیتابیس بکاپ بگیرید.

چه چیزهایی جمع می‌شود؟

چه چیزی کجا پاک کردنش
رونوشت‌های نوشته و برگه posts بی‌خطر؛ چندتای آخر را نگه دارید
پیش‌نویس‌های خودکار و زباله‌دان posts بی‌خطر
دیدگاه‌های اسپم و زباله‌دان comments بی‌خطر
ترنزینت‌های منقضی options بی‌خطر
متای بی‌صاحب (مربوط به نوشته‌ی حذف‌شده) postmeta بی‌خطر
سشن‌های منقضی ووکامرس woocommerce_sessions بی‌خطر؛ از وضعیت ووکامرس، ابزارها
کارهای زمان‌بندی انجام‌شده actionscheduler_actions و logs موارد تکمیل‌شده و ناموفق قدیمی، بی‌خطر
لاگ افزونه‌های امنیتی، آمار و ریدایرکت جدول‌های خود افزونه از تنظیمات همان افزونه؛ دوره‌ی نگهداری را کم کنید
جدول‌ها و تنظیمات افزونه‌های حذف‌شده جدول جدا یا options با احتیاط؛ فقط وقتی مطمئنید

اول ببینید چه چیزی بزرگ است

در phpMyAdmin دیتابیس را انتخاب کنید و روی ستون Size بزنید تا جدول‌ها بر اساس حجم مرتب شوند. معمولاً سه چهار جدول بیشتر حجم را دارند. اگر جدول لاگ یک افزونه چند صد مگابایت است، مشکل همان است، نه رونوشت‌ها. (کار با phpMyAdmin)

autoload چیست؟

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

حجم autoload وضعیت
زیر ۵۰۰ کیلوبایت خوب
۵۰۰ کیلوبایت تا ۱ مگابایت قابل‌قبول؛ زیر نظر بگیرید
بالای ۱ مگابایت باید بررسی شود

در وردپرس‌های تازه، ابزارها، سلامت سایت، اگر این مقدار زیاد باشد هشدار می‌دهد. برای دیدن عدد دقیق، در زبانه‌ی SQL phpMyAdmin این دستور را اجرا کنید (پیشوند جدول را با مال خودتان عوض کنید):

SELECT SUM(LENGTH(option_value)) AS bytes
FROM wp_options
WHERE autoload IN ('yes','on','auto','auto-on');

و برای دیدن بزرگ‌ترین‌ها:

SELECT option_name, LENGTH(option_value) AS bytes
FROM wp_options
WHERE autoload IN ('yes','on','auto','auto-on')
ORDER BY bytes DESC
LIMIT 20;

این دو دستور فقط می‌خوانند و چیزی را تغییر نمی‌دهند. نام ردیف‌ها معمولاً نشان می‌دهد مال کدام افزونه است.

با ردیف‌های بزرگ چه کنم؟

ردیف مال اقدام
افزونه‌ای که دیگر نصب نیست بعد از بکاپ، حذف
افزونه‌ی فعال، داده‌ی کش یا لاگ از تنظیمات همان افزونه پاک کنید یا قابلیتش را خاموش کنید
افزونه‌ی فعال، تنظیمات اصلی دست نزنید
ترنزینت (نام با _transient_) قابل حذف؛ دوباره ساخته می‌شود
نمی‌دانم مال چیست نامش را جستجو کنید؛ تا مطمئن نشدید حذف نکنید

محدود کردن رونوشت‌ها

در wp-config.php، بالای خط «That’s all»:

define('WP_POST_REVISIONS', 5);
define('EMPTY_TRASH_DAYS', 7);

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

پاک‌سازی با افزونه

  1. بکاپ دیتابیس بگیرید. (بکاپ دیتابیس)
  2. یک افزونه‌ی پاک‌سازی دیتابیس نصب کنید. افزونه‌ی LiteSpeed Cache هم بخش Database دارد.
  3. فقط موارد بی‌خطر جدول بالا را انتخاب کنید.
  4. بعد از پاک‌سازی، گزینه‌ی Optimize Tables را بزنید تا فضای خالی جدول‌ها آزاد شود.
  5. سایت را بررسی کنید و افزونه‌ی پاک‌سازی را، اگر دیگر لازم نیست، حذف کنید.

گزینه‌ی «حذف جدول‌های بی‌صاحب» را با احتیاط بزنید؛ بعضی افزونه‌ها جدول را با پیشوند غیرمعمول می‌سازند و اشتباهی بی‌صاحب تشخیص داده می‌شوند.

موتور جدول‌ها

جدول‌هایی که هنوز MyISAM هستند، هنگام نوشتن کل جدول را قفل می‌کنند و در سایت پربازدید گلوگاه می‌شوند. تبدیل به InnoDB معمولاً کمک می‌کند. (تبدیل موتور جدول)

انتظار واقع‌بینانه

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

سوال‌های رایج

هر چند وقت پاک‌سازی کنم؟

برای سایت معمولی هر سه تا شش ماه. برای فروشگاه و سایت پرمحتوا ماهانه.

پاک‌سازی خودکار زمان‌بندی‌شده خوب است؟

برای موارد بی‌خطر (ترنزینت منقضی، اسپم) بله. برای بقیه، دستی و بعد از بکاپ.

دیتابیس چقدر باید باشد؟

عدد ثابتی ندارد. سایت محتوایی معمولی چند ده مگابایت است؛ اگر چند صد مگابایت شده، تقریباً همیشه یک جدول لاگ مقصر است.