سلام! نگین شیخ الاسلامی هستم. تا حالا شده کلی روی سایتت کار کنی، بهترین قالب رو بخری، عکسهات رو بهینه کنی، اما باز هم حس کنی سایتت «کُنده» و اونجوری که باید فِرز نیست؟ همهی ما دنبال بهینهسازی سرعت سایت وردپرسی هستیم، اما معمولاً یه جای خیلی مهم رو فراموش میکنیم: یه انباری شلوغ و بههمریخته ته زیرزمین سایت که بهش میگن «دیتابیس».
راستش رو بخوای، بیشتر وقتا مشکل اصلاً از قالب سنگین یا عکسهای حجیم نیست؛ مشکل از جاییه که هیچکس نگاهش نمیکنه!
امروز میخوام یه گپ خودمونی با هم بزنیم در مورد اینکه چطور این انباری رو خونهتکونی کنیم تا سایتت نفس بکشه و پرواز کنه. قبل از اینکه بریم سراغ آموزشهای قدمبهقدم، بذار تو یه جدول ساده بهت نشون بدم که اصلاً چرا باید به دیتابیس اهمیت بدی و این پاکسازی چه تاثیری روی سایتت میذاره.
جدول کاربردی
| ویژگی | دیتابیس کُند و سنگین (قبل از پاکسازی) | دیتابیس بهینه و سبک (بعد از پاکسازی) |
| زمان پاسخ سرور (TTFB) | 🐢 بالا و آزاردهنده (کاربر منتظره) | 🚀 سریع و آنی (سایت بلافاصله لود میشه) |
| سرعت پیشخوان ادمین | 🐌 بهسختی لود میشه و اعصابخردکن | ⚡️ روان، سریع و لذتبخش |
| حجم و سرعت بکاپگیری | 🐘 فایلهای بکاپ سنگین و پروسه زمانبر | 🐿️ فایلهای کمحجم و بکاپگیری در چند ثانیه |
| تجربه کاربری (UX) | 😩 کاربر خسته میشه و صفحه رو میبنده | 😊 کاربر راضیه و تو سایتت میمونه |
چرا بهینهسازی دیتابیس وردپرس برای سرعت سایت حیاتی است؟
بذار یه تصویر برات بسازم تا موضوع کاملاً جا بیفته. سایت وردپرسی تو رو مثل یه خونهی شیک و مدرن در نظر بگیر. قالب سایتت، دکوراسیون و مبلمان پذیراییه. عکسها و محتواها، وسایل توی قفسهها هستن. همهچیز جلوی چشم و قشنگه.
اما دیتابیس؟ اون انباریِ ته زیرزمینه!
اوایل که سایت رو راه انداختی، این انباری کوچیک، تمیز و مرتب بود. ولی بهمرور زمان، هر چیزی که فکر میکردی «شاید یه روزی لازم بشه» رو انداختی اون تو: پیشنویسهای قدیمی مقالهها، نظرات اسپمی که پاک نکردی، تنظیمات افزونههایی که ۵ ماه پیش حذفشون کردی، رونوشتهای بیشمار هر پست…
حالا اون انباری تبدیل شده به یه فضای درهمریخته و خفهکننده. هر بار که وردپرس میخواد یه چیز ساده (مثل یه مقاله یا اطلاعات یه کاربر) رو پیدا کنه، باید بره تو اون آشفتهبازار بگرده. این «گشتن» و «معطل شدن» همون چیزیه که سرعت سایتت رو ذرهذره میکُشه.
بهینهسازی دیتابیس، یعنی خونهتکونی اساسی اون انباری. یعنی هرچیزی که اضافه است رو بریزیم دور تا همهچیز سریع و روان پیدا بشه. این کار یه گزینهی لوکس نیست، یه کار «حیاتی» برای نفس کشیدن سایتته.
دیتابیس وردپرس چیست و چگونه “سنگین” و “کند” میشود؟
خیلی ساده بخوام بگم: دیتابیس، مغز و حافظهی سایت توئه.
تمام نوشتههات، اطلاعات کاربرا، رمزهای عبور (بهصورت رمزنگاری شده)، تنظیمات قالب و افزونهها، کامنتها، محصولات فروشگاهت… همهچیز و همهچیز، اونجا توی جداول منظم (یا بهتره بگم، قبلاً منظم!) ذخیره میشه.
حالا چطور این مغز خسته، «سنگین» و «کند» میشه؟ دقیقاً مثل همون انباری که گفتم:
- رونوشتها (Revisions): این بزرگترین متهمه. هر بار که تو دکمه «ذخیره پیشنویس» یا «بهروزرسانی» رو میزنی، وردپرس یه کپی کامل از نسخهی قبلی اون پست رو نگه میداره. اگه یه مقاله رو ۱۵ بار ویرایش کنی، ۱۵ تا نسخه اضافه تو دیتابIS داری که هیچوقت استفاده نمیشن!
- کامنتهای اسپم و جفنگ: حتی اگه این کامنتها رو تأیید نکنی و تو سطل زباله باشن، باز هم تو دیتابیس جا گرفتن و هر بار وردپرس باید از روشون بپره تا به کامنتهای واقعی برسه.
- گذراها (Transients): اینا یه جور حافظه پنهان موقت (کش) هستن که تو خود دیتابیس ذخیره میشن تا بعضی کارها سریعتر انجام بشه. مشکل اینجاست که خیلی از افزونهها یادشون میره این گذراهای منقضی شده رو پاک کنن و اینا تا ابد اونجا تلنبار میشن.
- تنظیمات افزونههای یتیم: خیلی از ماها افزونههای مختلفی رو نصب و تست میکنیم. وقتی یه افزونه رو «پاک» میکنی، متأسفانه خیلی از اونا تنظیمات و جداولشون رو تو دیتابیس جا میذارن. اینا مثل اسباببازیهای شکستهای هستن که گوشه انباری افتادن.
همین چیزای کوچیک، قطرهقطره جمع میشن و یهو میبینی دیتابیست از یه فایل ۱۰ مگابایتی، تبدیل به یه غول ۵۰۰ مگابایتی شده که بهسختی نفس میکشه.
تاثیر مستقیم دیتابیس بهینه بر سرعت بارگذاری (TTFB) و تجربه کاربری (UX)
خب، حالا اون انباری شلوغ و این مغز خسته، دقیقاً چه ربطی به کاربری داره که داره سایت ما رو میبینه؟ اینجا پای دو تا اصطلاح خیلی مهم میاد وسط: TTFB و UX.
۱. TTFB (Time to First Byte):
این یعنی «مدت زمان تا دریافت اولین بایت». بذار یه سناریو برات تعریف کنم:
کاربر آدرس سایتت رو تو مرورگرش میزنه (یعنی: «سلام سرور! اون مقاله در مورد سئو رو بهم بده»).
سرور تو درخواست رو میگیره و میگه: «چشم! بذار برم از دیتابیس بپرسم این مقاله کجاست و محتواش چیه».
حالا سرور میره سراغ اون انباری شلوغ (دیتابیس سنگین تو). باید کلی تو اون بههمریختگی بگرده تا مقاله رو پیدا کنه، آمادهاش کنه و اولین تیکهاش (First Byte) رو برای مرورگر کاربر بفرسته.
این «گشتن» و «معطل شدن» سرور، همون TTFBئه. اگه دیتابیس تو کُند باشه، TTFB میره بالا. این همون لحظهایه که کاربر به یه صفحهی سفیدِ خالی زل زده و منتظره…
۲. تجربه کاربری (UX):
اینم نتیجهی مستقیم همون انتظاره. هیچکس، مطلقاً هیچکس، دوست نداره منتظر بمونه.
یادمه یه بار میخواستم از یه سایت فروشگاهی خیلی معروف خرید کنم. همهچیز عالی بود تا رسیدم به صفحهی تسویهحساب. انقدر لود شدن اون صفحه (که قطعاً درگیر خوندن اطلاعات سنگین از دیتابیس بود) طول کشید که بیخیال شدم، صفحه رو بستم و رفتم از یه سایت دیگه خریدم!
دیتابیس بهینه یعنی TTFB پایین. یعنی کاربر «بلافاصله» جواب درخواستش رو میگیره، محتوا رو میبینه و یه نفس راحت میکشه. این یعنی یه تجربه کاربری (UX) عالی و رضایتبخش.
نشانههایی که میگویند دیتابیس وردپرس شما به پاکسازی نیاز دارد
خوشبختانه دیتابیس قبل از اینکه کامل از کار بیفته، یه سری آلارم و نشونه به ما میده. اگه این موارد رو دیدی، شک نکن که وقت خونهتکونی اون انباری رسیده:
- کُندی وحشتناک در پیشخوان (Backend): این اولین و واضحترین علامته. وقتی میخوای لیست مقالههات رو ببینی، یه پست جدید اضافه کنی، یا حتی وارد پنل ادمین بشی، همهچیز با تأخیر آزاردهندهای لود میشه. این یعنی سرور داره زور میزنه تا اطلاعات رو از دیتابیس شلوغت بکشه بیرون.
- کُند شدن محسوس «روی سایت» (Frontend): حتی اگه بهترین افزونههای کش رو هم نصب کرده باشی، باز حس میکنی سایتت مثل قبل «فِرز» نیست. لود صفحهها، مخصوصاً صفحاتی که اطلاعات زیادی از دیتابیس میخونن (مثل صفحهی اصلی وبلاگ، صفحهی فروشگاه یا آرشیوها)، بیشتر از حد معمول طول میکشه.
- بالا رفتن TTFB در تستهای سرعت: اگه سایتت رو تو ابزارهایی مثل GTmetrix یا PageSpeed Insights تست میکنی و مدام با اخطار “Reduce initial server response time“ (زمان پاسخ اولیه سرور را کاهش دهید) مواجه میشی، یکی از اصلیترین متهمها دیتابیس توئه.
- خطاهای گاهوبیگاه: دیدن خطاهایی مثل “Error Establishing a Database Connection“ (خطا در برقراری ارتباط با پایگاه داده) یا خطاهای Timeout (وقفه زمانی) دیگه زنگ خطر آخره. این یعنی دیتابیس اونقدر سنگین و تحت فشاره که سرور دیگه نمیتونه تو زمان مشخص بهش وصل بشه.
- حجم خیلی بزرگ فایل دیتابیس: اگه از هاستت یه بکآپ از دیتابیس بگیری (فایل .sql) و ببینی حجمش بهطور نامعقولی زیاده (مثلاً برای یه سایت وبلاگی ساده، حجمی بالاتر از ۱۰۰ یا ۲۰۰ مگابایت میتونه مشکوک باشه)، قطعاً وقت پاکسازیه.
هشدار! مهمترین قدم قبل از هر تغییر: تهیه نسخه پشتیبان (Backup)
خب، قبل از اینکه آستینها رو بالا بزنیم و بریم سراغ اون «انباری» شلوغ که در موردش حرف زدیم، یه لحظه وایستا. این مهمترین بخش کاره.
ببین، ما قراره بریم تو موتورخونهی سایت و یه سری پیچومهرهها رو دستکاری کنیم. بهینهسازی دیتابیس، مخصوصاً اگه دستی انجام بشه، یه کار حساسه. مثل جراحیه. ۹۹ درصد مواقع همهچیز عالی پیش میره، اما تو همیشه باید برای اون ۱ درصد خطا آماده باشی.
تجربهی شخصی من میگه: «بدترین لحظه برای یه متخصص سئو یا مدیر سایت، لحظهایه که یه چیزی خراب میشه و تو یادت میاد که ایکاش بکاپ گرفته بودی!»
گرفتن نسخه پشتیبان، بیمهی ماشینته. تو هر روز ازش استفاده نمیکنی، اما خدای نکرده روزی که لازم بشه، حاضری همهچیزت رو بدی که اون یه برگه بیمه رو داشته باشی. پس لطفاً، خواهشاً، اکیداً، قبل از خوندن ادامهی این مقاله، برو و از دیتابیست یه بکاپ کامل بگیر.
آموزش بکاپگیری کامل از دیتابیس وردپرس از طریق هاست (phpMyAdmin)
این روش، روش «حرفهایها» و یه کم فنیتره، اما مطمئنترین راهه چون مستقیم میری سراغ اصل ماجرا. یه کم شاید اولش ترسناک به نظر برسه، اما قول میدم ساده است.
- ورود به هاست: اول وارد پنل مدیریت هاستت شو (حالا چه cPanel باشه، چه DirectAdmin یا Plesk).
- پیدا کردن phpMyAdmin: دنبال گزینهای به اسم phpMyAdmin بگرد. این آیکون معمولاً تو بخش «Databases» یا «پایگاههای داده» است.
- انتخاب دیتابیس: وقتی وارد phpMyAdmin میشی، از ستون سمت چپ، باید اسم دیتابیس سایتت رو پیدا و روش کلیک کنی. (اگه نمیدونی اسمش چیه، میتونی از توی فایل wp-config.php سایتت پیداش کنی).
- رفتن به تب Export: بعد از انتخاب دیتابیس، از منوی بالای صفحه، روی گزینهی Export (خروجی گرفتن) کلیک کن.
- تنظیمات خروجی: اینجا معمولاً دو تا گزینه داری:
- Quick (سریع): برای ۹۹٪ ماها این بهترین گزینه است. فقط همینو انتخاب کن.
- Format (فرمت): مطمئن شو که روی SQL تنظیم شده باشه.
- دانلود!: دکمه Export یا Go رو بزن. یه فایل با پسوند .sql شروع به دانلود میکنه.
تبریک! تو الان یه کپی کامل از «مغز» سایتت رو روی کامپیوتر خودت داری. این فایل رو یه جای امن نگه دار.
معرفی افزونههای مطمئن برای گرفتن بکاپ از دیتابیس
اگه کار کردن با phpMyAdmin برات سخته یا حس میکنی ممکنه چیزی رو خراب کنی (که کاملاً طبیعیه)، اصلاً نگران نباش. دنیا پر از افزونههای عالیه که این کار رو با چند کلیک برات انجام میدن.
اینا چندتا از بهترین گزینههایی هستن که خودم سالهاست دارم ازشون استفاده میکنم:
- UpdraftPlus (آپدرفتپلاس): این رفیق همیشگی منه. هم رایگانه، هم فوقالعاده قدرتمنده. میتونی تنظیمش کنی که بهطور خودکار (مثلاً هر شب) از سایتت بکاپ بگیره و فایل بکاپ رو مستقیم بفرسته تو گوگل درایو، دراپباکس یا ایمیلت. هم میتونه کل سایت رو بکاپ بگیره، هم فقط دیتابیس رو.
- All-in-One WP Migration: این یکی برای «جابهجایی» سایت عالیه، اما کار بکاپ رو هم بینظیر انجام میده. کار کردن باهاش بهشدت ساده است و همهچیز رو تو یه فایل جمعوجور بهت تحویل میده.
- WP-DB-Backup: یه افزونهی سبک و قدیمی که کارش فقط یه چیزه: بکاپ گرفتن از دیتابیس. اگه دنبال یه ابزار سادهای که فقط همین یه کار رو بکنه، عالیه.
نکته کلیدی: فرقی نمیکنه کدوم روش رو انتخاب میکنی؛ دستی از طریق هاست یا با افزونه. مهم اینه که «حتماً» قبل از شروع بهینهسازی، یه نسخه پشتیبان «سالم» و «جدید» داشته باشی.
حالا که خیالمون از بیمهنامه راحت شد، بریم سراغ خونهتکونی!
فاز اول: پاکسازی عمیق دیتابیس (حذف موارد اضافی)
این مرحله مثل این میمونه که تمام وسایل انباری رو بریزیم بیرون، وسط حیاط. بعد یکییکی برشون داریم و از خودمون بپرسیم: «آیا من واقعاً به این احتیاج دارم؟» ۹۰ درصد مواقع جواب «نه» است. ما هم قراره دقیقاً همین کار رو با دیتابیس بکنیم.
حذف رونوشتهای پست (Post Revisions): قاتل خاموش فضای دیتابیس
این مورد، راست کارِ خودمه. بذار یه چیزی رو بهت بگم: وردپرس بهطور دیوانهواری عاشق ذخیره کردن همهچیزه!
هر بار که تو داری یه مقاله مینویسی و دکمه «ذخیره پیشنویس» یا «بهروزرسانی» رو میزنی، وردپرس یه کپی کامل از اون پست رو (قبل از تغییراتت) توی دیتابیس ذخیره میکنه. بهش میگه «رونوشت».
تصور کن یه مقاله ۲۰۰۰ کلمهای رو ۳۰ بار ویرایش کردی. میدونی یعنی چی؟ یعنی تو ۳۰ تا کپی از اون مقاله تو دیتابیس داری که ۹۹ درصدشون هیچوقت، هیچوقت، لازم نمیشن. این همون «قاتل خاموش» فضاست. لازم نیستن، دیده نمیشن، اما دیتابیس تو رو مثل بادکنک باد میکنن.
پاکسازی دیدگاههای اسپم و نظرات در صف تایید یا زبالهدان
این یکی دیگه خیلی واضحه. کامنتهای اسپم مثل هرزنامههایی هستن که تو صندوق پستی دم در خونهات جمع میشن. حتی اگه هیچوقت بازشون نکنی و بندازیشون تو سطل آشغالِ توی خونه، باز هم فضا اشغال کردن.
هر کامنت اسپم، هر نظری که تو صف تایید مونده و تو هیچوقت تأییدش نکردی، یا حتی کامنتهایی که فرستادی تو «زبالهدان»، همشون ردیفهای اضافه توی جدول دیتابیس تو هستن. اینا سربار خالصن. وقتی وردپرس میخواد کامنتهای واقعی رو نشون بده، مجبوره از روی این همه زباله بپره. همشون باید پاک بشن، بدون رحم!
حذف دادههای گذرا (Transients) منقضی شده
«گذراها» یا Transients یه اسم قلمبهسلمبه برای یه مفهوم ساده است. اینا یه جور «یادداشت موقت» یا «کش» هستن که افزونهها و خود وردپرس تو دیتابیس ذخیره میکنن تا دفعهی بعد سریعتر به یه اطلاعاتی دسترسی داشته باشن.
مشکل کجاست؟ مشکل اینجاست که خیلی از افزونهها، بعد از اینکه تاریخ انقضای این یادداشتها تموم میشه، یادشون میره اونها رو بندازن دور!
این دادههای گذرا تلنبار میشن و تبدیل به یه عالمه کاغذ باطلهی قدیمی میشن که فقط جدول wp_options دیتابیس تو رو سنگین و سنگینتر میکنن.
پاکسازی کامل زبالهدان (Trash) پستها، صفحات و دیدگاهها
اینم یه نکتهی ظریف داره. وقتی تو یه پست، صفحه یا کامنت رو «حذف» میکنی، وردپرس اون رو واقعاً حذف نمیکنه. فقط میفرستدش تو یه پوشه به اسم «زبالهدان» (Trash).
این مثل سطل آشغال ویندوز یا مک تو میمونه. تا وقتی که سطل رو «خالی» (Empty) نکنی، اون فایلها هنوز روی هارد تو جا گرفتن. وردپرس معمولاً این زبالهها رو تا ۳۰ روز نگه میداره (که اگه پشیمون شدی برگردونی)، اما بعد از اون هم گاهی اوقات کامل پاک نمیشن. ما تو این مرحله میخوایم مطمئن بشیم که سطل آشغال دیتابیس کاملاً خالیه.
شناسایی و حذف دادههای یتیم (Orphaned Data) افزونههای حذف شده
این یکی مورد علاقهی منه، چون مثل یه کارآگاه بازی میمونه!
بهش میگن «دادههای یتیم». داستانش اینه: تو یه افزونهی اسلایدر رو نصب میکنی، باهاش کار میکنی، خوشت نمیاد و «حذفش» میکنی.
اما چی رو حذف میکنی؟ فقط فایلهای افزونه رو. متأسفانه، خیلی از افزونههای «بد» (یا تنبل)، وقتی حذف میشن، تنظیمات و جداولی که توی دیتابیس ساخته بودن رو همونجا ول میکنن و میرن!
من سایتهایی رو دیدم که فقط ۱۵ تا افزونه فعال داشتن، اما دیتابیسشون پر از جداول و تنظیماتِ ۵۰ تا افزونهای بود که در طول ۵ سال گذشته نصب و پاک کرده بودن! اینا «روح»های سرگردان تو دیتابیس تو هستن که فقط فضا اشغال میکنن و هیچ کاربردی ندارن. پیدا کردن و پاک کردن اینا، یه نفس عمیق به دیتابیست میده.
روش آسان: بهینهسازی دیتابیس با استفاده از افزونه (آموزش گام به گام)
اینجا قراره با چند تا از رفیقهای همیشگی من تو تیم «وزیر سئو» آشنات کنم. این افزونهها دقیقاً همون کار «خونهتکونی» فاز قبل رو انجام میدن، اما بهجای اینکه تو مجبور باشی دونهدونه زبالهها رو پیدا کنی، اینا یه جاروبرقی صنعتی دستشون میگیرن و کل اون انباری رو برق میندازن.
معرفی و آموزش افزونه WP-Optimize: بهترین ابزار همهکاره
اگه از من بپرسی «نگین، فقط یه افزونه برای این کار بگو»، انتخاب من WP-Optimizeئه. این افزونه آچار فرانسهی بهینهسازی دیتابیسه. رایگانه، قدرتمنده و کار باهاش مثل آب خوردنه.
بیا با هم قدمبهقدم نصب و راهاندازیش کنیم:
- نصب افزونه: برو به پیشخوان وردپرس > افزونهها > افزودن. تو کادر جستجو تایپ کن WP-Optimize. همون اولی که بالای ۱ میلیون نصب فعال داره رو «نصب» و بعد «فعال» کن.
- ورود به بخش دیتابیس: بعد از فعالسازی، یه گزینهی جدید به اسم WP-Optimize به منوی پیشخوانت اضافه میشه. روش کلیک کن.
- انتخاب گزینهها: اولین تبی که میبینی، تب Database (پایگاه داده) است. اینجا یه لیست بلندبالا از تمام چیزهایی که میتونی تمیز کنی میبینی.
- شروع پاکسازی: حالا، گزینههایی که تو بخش قبلی در موردشون حرف زدیم رو تیک بزن:
- پاکسازی همهی رونوشتهای نوشته (Clean all post revisions) – حتماً تیک بزن.
- پاکسازی پیشنویسهای خودکار (Clean all auto-draft posts)
- پاکسازی دیدگاههای جفنگ و زبالهدان (Clean all spam and trashed comments)
- حذف گذراهای منقضی شده (Remove expired transient options)
- پاکسازی سطل زباله (Clean trash posts and pages)
- اجرای عملیات: بالای صفحه یه دکمه آبی بزرگ هست به اسم Run all selected optimizations (اجرای تمام بهینهسازیهای انتخاب شده). قبل از اینکه کلیک کنی، یه بار دیگه چک کن که بکاپ داری… داری دیگه؟ آفرین. حالا با خیال راحت دکمه رو بزن.
چند ثانیه (یا اگه دیتابیست خیلی شلوغ باشه، چند دقیقه) صبر کن. خود افزونه بهت گزارش میده که چقدر فضا آزاد کرده. تجربهی من میگه دفعهی اولی که این کار رو روی یه سایت قدیمی انجام میدی، از دیدن حجمی که آزاد شده شوکه میشی!
چگونه با افزونه WP-Rocket دیتابیس را پاکسازی کنیم؟
حالا یه سناریوی دیگه. شاید تو همین الانشم افزونهی پریمیوم و فوقالعادهی WP-Rocket رو برای کش و سرعت سایتت داری. (اگه نداری و دنبال بهترین افزونه کش پولی هستی، این انتخاب اول منه).
خبر خوب اینه که «راکت» یه بخش کوچولوی تر و تمیز برای خونهتکونی دیتابیس هم داره! این یعنی تو اصلاً نیازی به نصب یه افزونهی جدا مثل WP-Optimize نداری.
- برو به تنظیمات > WP Rocket.
- از منوهای بالای صفحه، برو به تب Database (پایگاه داده).
- تمام اون گزینههایی که بالا گفتم، اینجا هم هستن: «پاکسازی نوشتهها» (رونوشتها و پیشنویسها)، «پاکسازی دیدگاهها» (اسپم و زبالهدان) و «پاکسازی گذراها».
- تیکهای لازم رو بزن و دکمه Save Changes and Optimize (ذخیره تغییرات و بهینهسازی) رو کلیک کن.
تمام! به همین سادگی. من عاشق این ویژگی راکتام چون جلوی شلوغ شدن پیشخوانم رو میگیره و نمیذاره یه افزونهی اضافه نصب کنم.
مقایسه افزونههای پاکسازی: WP-Sweep در مقابل WP-Optimize
یه رقیب سبکوزن و خیلی تخصصی هم تو این میدون هست به اسم WP-Sweep. حالا سوال اینه: کدوم بهتره؟ WP-Optimize یا WP-Sweep؟
بذار برات تو یه جدول ساده خلاصهاش کنم:
| ویژگی | WP-Optimize (آچار فرانسه) | WP-Sweep (متخصص) |
| وظیفه اصلی | همهکاره: پاکسازی دیتابیس، فشردهسازی عکس، کش صفحه | فقط یک کار: پاکسازی دیتابیس |
| روش پاکسازی | از دستورات مستقیم SQL استفاده میکنه (خیلی سریعه) | از توابع خود وردپرس استفاده میکنه (خیلی امنه) |
| سبکی | یه کم سنگینتره چون امکاناتش زیاده | فوقالعاده سبک و مینیماله |
| دادههای یتیم | میتونه جداول یتیم رو هم پیدا و حذف کنه | تمرکزش بیشتر روی موارد استاندارد وردپرسه |
حالا نظر شخصی من (نگین):
- WP-Optimize مثل یه «مالتیویتامین» کامله. اگه میخوای یه افزونه نصب کنی که هم دیتابیس رو تمیز کنه، هم حواسش به عکسات باشه و هم بتونه کش رو مدیریت کنه، این بهترین گزینه است.
- WP-Sweep مثل یه قرص ویتامین C خالصه. کارش فقط پاکسازیه و این کار رو با استفاده از توابع اصلی وردپرس انجام میده، که از نظر فنی یه کم «تمیزتر» و «امنتر»ه و هیچ دادهی یتیمی از خودش جا نمیذاره.
کدوم رو انتخاب کنی؟
اگه همین الان از یه افزونهی کش (مثل راکت) و یه افزونه بهینهسازی عکس (مثل اسموش) استفاده میکنی، WP-Sweep رو نصب کن. سبکه و کارش رو عالی انجام میده.
اما اگه دنبال یه راهحل «همهکاره» هستی که با یه تیر چند نشون بزنی، WP-Optimize انتخاب هوشمندانهتریه.
من خودم معمولاً روی سایتهای مشتریها از WP-Optimize استفاده میکنم چون میتونم همزمان چند تا کار رو باهاش راه بندازم، مگه اینکه پروژه خیلی حساس باشه و ترجیح بدم ابزارهای تخصصی جداگونه داشته باشم.
روش حرفهای: بهینهسازی جداول دیتابیس به صورت دستی (از طریق phpMyAdmin)
اینجا دیگه خبری از دکمههای قشنگ و آبیرنگ افزونهها نیست. ما مستقیماً با خود «مغز» سایت، یعنی phpMyAdmin کار داریم. اینجا جاییه که میتونی ببینی دیتابیست واقعاً چقدر «کثیف» شده.
بهینهسازی جداول (Optimize Table) چیست و چگونه در phpMyAdmin انجام میشود؟
بذار یه مثال بزنم. تو اون انباری شلوغ رو یادت میاد؟ فرض کن ما تو فاز قبلی، کلی از زبالهها و کارتنهای خالی رو انداختیم بیرون. اما هنوز اون وسایلی که موندن، پخشوپلا هستن. وسط انباری کلی «فضای خالی» هدر رفته وجود داره.
«بهینهسازی جدول» یا Optimize Table، مثل این میمونه که یه نفر بره تو اون انباری و همهی وسایل باقیمونده رو مرتب بچینه یه گوشه، فشردهشون کنه و تمام اون فضاهای خالیِ هدر رفته رو از بین ببره. این کار باعث میشه «مساحت» اشغالشدهی واقعی کمتر بشه و دفعهی بعد که وردپرس میره تو اون انباری، لازم نیست از روی کلی فضای خالی بپره تا به یه وسیله برسه.
چطوری انجامش بدیم؟
- وارد هاستت شو و برو به
phpMyAdmin. - دیتابیس سایتت رو از ستون سمت چپ انتخاب کن.
- لیست تمام جداول دیتابیست (مثل
wp_posts,wp_comments,wp_optionsو…) برات باز میشه. - پایینِ پایینِ لیست، یه گزینه هست به اسم
Check all(انتخاب همه). تیکش رو بزن تا همهی جداول انتخاب بشن. - درست کنارش یه منوی کشویی هست به اسم
With selected:(با موارد انتخاب شده:). روش کلیک کن و گزینهیOptimize table(بهینهسازی جدول) رو انتخاب کن. - دکمه
Goرو بزن.
چند ثانیه صبر کن. phpMyAdmin شروع میکنه به مرتبسازی دونهدونهی جداول. وقتی تموم بشه، یه لیست سبز بهت نشون میده که میگه «Table has been optimized». به همین سادگی!
شناسایی و کاهش “Overhead” (سربار) جداول دیتابیس
«Overhead» یا «سربار» دقیقاً همون «فضای خالی هدر رفته» است که تو مثال انباری گفتم.
وقتی تو یه عالمه رونوشت پست، کامنت اسپم و گذرا رو حذف میکنی، جای اونها تو فایل دیتابیس خالی میمونه (مثل جای خالی دندونی که کشیدی). این فضای خالی، «سربار» (Overhead) نام میگیره. دیتابیس تو هنوز همونقدر بزرگه، فقط توش کلی حفرهی خالی وجود داره.
خوشبختانه، وقتی تو phpMyAdmin به لیست جداولت نگاه میکنی، یه ستون وجود داره به اسم Overhead (سربار).
- قبل از اینکه
Optimize table(مرحلهی بالا) رو اجرا کنی، یه نگاه به این ستون بنداز. - اگه جلوی بعضی جداول (مخصوصاً
wp_postsیاwp_options) عددهای قابل توجهی (مثلاً ۱۰ مگابایت، ۵۰ مگابایت یا حتی بیشتر) دیدی، یعنی اون جدول بهشدت نیاز به بهینهسازی داره. - خبر خوب: اجرای همون دستور
Optimize tableکه تو H3 قبلی گفتم، دقیقاً همین کار رو میکنه! یعنی تمام اون «سربار»ها رو شناسایی میکنه و از بین میبره و حجم واقعی دیتابیست رو کم میکنه.
اجرای کوئری SQL برای حذف انبوه رونوشتها و اسپمها (برای کاربران پیشرفته)
اینجا دیگه واقعاً داریم کد میزنیم. این کار، همون کاریه که افزونهی WP-Optimize انجام میده، اما ما داریم «مستقیم» به دیتابیس دستور میدیم.
هشدار جدی: این دستورات، برگشتناپذیرن. بکاپ یادت نره!
- تو
phpMyAdmin، بعد از انتخاب دیتابیست، برو به تبSQL(بالای صفحه). - یه کادر بزرگ میبینی که میتونی توش دستور بنویسی.
- دستورات زیر رو یکییکی کپی کن، تو اون کادر Paste کن و دکمه
Goرو بزن.
۱. برای حذف تمام رونوشتهای پست (Revisions):
DELETE FROM wp_posts WHERE post_type = 'revision';
۲. برای حذف تمام کامنتهای اسپم:
DELETE FROM wp_comments WHERE comment_approved = 'spam';
۳. برای حذف تمام کامنتهای داخل زبالهدان:
DELETE FROM wp_comments WHERE comment_approved = 'trash';
۴. برای حذف تمام گذراهای (Transients) منقضی شده:
(این کوئری یه کم پیچیدهتره چون گذراهای فعال رو حذف نمیکنه)
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(
SUBSTRING( a.option_name, 1, CHAR_LENGTH( a.option_name ) - CHAR_LENGTH( SUBSTRING_INDEX( a.option_name, '\_', -1 ) ) - 1 ),
'timeout',
SUBSTRING( a.option_name, CHAR_LENGTH( a.option_name ) - CHAR_LENGTH( SUBSTRING_INDEX( a.option_name, '\_', -1 ) ) )
)
AND b.option_value < UNIX_TIMESTAMP();
اجرای این دستورات، بهخصوص روی یه دیتابیس قدیمی، حس فوقالعادهای از پاکیزگی به آدم میده!
بررسی و بهینهسازی جدول wp_options و مدیریت Autoload Data
خب، رسیدیم به حساسترین، تخصصیترین و شاید مهمترین جدول دیتابیس تو: wp_options.
این جدول، «کشوی همهکاره» یا «اتاق کنترل» سایت توئه. همهی تنظیمات اصلی وردپرس، تنظیمات قالب، تنظیمات تمام افزونهها (حتی اونایی که پاک کردی!) و کلی چیز دیگه تو این جدول ذخیره میشه.
مشکل کجاست؟
یه ستون تو این جدول هست به اسم autoload. اگه مقدار این ستون برای یه ردیف، yes باشه، وردپرس اون ردیف رو در هر بار بارگذاری هر صفحهی سایتت (از صفحهی اصلی گرفته تا مقالهها و ادمین) تو حافظه (Memory) لود میکنه.
حالا فاجعه رو تصور کن: تو ۵ سال پیش یه افزونهی اسلایدر نصب کردی، پاکش کردی، اما اون افزونهی تنبل، تنظیمات ۱۰ مگابایتیش رو تو جدول wp_options با autoload = 'yes' جا گذاشته! این یعنی سرور تو مجبوره برای دیدن هر صفحه، اون ۱۰ مگابایت آشغالِ یتیم رو بیاره تو حافظه! این فاجعه است.
چطور پیداشون کنیم؟
- برو به
phpMyAdmin، جدولwp_optionsرو باز کن. - برو به تب
SQL. - این کوئری رو اجرا کن تا ببینی ۲۰ تا از سنگینترین ردیفهایی که دارن
autoloadمیشن کدوما هستن:
SELECT option_name, LENGTH(option_value) AS option_size
FROM wp_options
WHERE autoload = 'yes'
ORDER BY option_size DESC
LIMIT 20;
تحلیل نتایج:
یه لیست بهت میده. حالا وقت کارآگاهبازیه.
- ردیفهای اصلی وردپرس (مثل
siteurl,home,active_plugins) رو کاری نداریم. - دنبال اسمهای عجیبغریب بگرد! اسمهایی که شبیه اسم یه افزونهی قدیمیان که دیگه ازش استفاده نمیکنی.
- اگه چیزی پیدا کردی (مثلاً
old_backup_plugin_logsکه حجمش ۵ مگابایته)، bingo!
چطور حذفش کنیم؟
- روش امن (تغییر Autoload): برو تو جدول
wp_options، اونoption_nameرو جستجو (Search) کن. پیداش کن،Editرو بزن و فقط مقدار ستونautoloadرو ازyesبهnoتغییر بده. اینطوری دیگه تو هر صفحه لود نمیشه، اما دیتای اون افزونه هنوز هست (اگه یه روزی لازم شد). - روش تهاجمی (حذف کامل): اگه ۱۰۰٪ مطمئنی که اون ردیف مال یه افزونهی یتیم و به درد نخوره، میتونی با یه کوئری SQL حذفش کنی:
DELETE FROM wp_options WHERE option_name = 'اسم_اون_آپشن_مزاحم';
این کار، بهینهسازی wp_options، یکی از تأثیرگذارترین کارهاییه که میتونی برای کاهش TTFB و سبک کردن بار روی سرور انجام بدی. ولی بازم میگم، این دیگه تهِ کارهای تخصصیه و باید دقیقاً بدونی داری چیکار میکنی.
فراتر از پاکسازی: راهکارهای پیشگیری و نگهداری خودکار
این فاز، فاز «پیشگیری»ئه. مثل این میمونه که بهجای اینکه صبر کنی تا خونت منفجر بشه و بعد یه هفته وقت بذاری تمیزش کنی، یه جاروبرقی رباتیک تنظیم کنی که هر روز خودش کارش رو بکنه. ما هم دقیقاً میخوایم همین کار رو با دیتابیس بکنیم.
چگونه تعداد رونوشتها را در وردپرس محدود کنیم؟ (کد wp-config.php)
این یکی از مهمترین و تأثیرگذارترین کارهاییه که میتونی انجام بدی. یادت میاد گفتم وردپرس عاشق ذخیره کردن «رونوشت» (Revisions) از هر بار ویرایش توئه؟ و چطوری اینا دیتابیس رو باد میکنن؟
خب، ما میتونیم خیلی راحت به وردپرس بگیم: «لطفاً انقدر ولخرجی نکن!»
ما این کار رو از طریق فایل wp-config.php انجام میدیم. این فایل، مثل قانون اساسی یا فرمون اصلی سایت توئه.
- وارد هاستت شو و به File Manager برو.
- تو پوشهی روت (root) سایتت (همونجایی که پوشههای
wp-adminوwp-contentهستن)، فایلwp-config.phpرو پیدا کن. - روی
Editکلیک کن. - برو پایین فایل، قبل از خطی که نوشته
/* That's all, stop editing! Happy publishing. */، یکی از این دو تا کد رو (بسته به نیازت) اضافه کن:
گزینه ۱: محدود کردن تعداد رونوشتها (بهترین و پیشنهادی من)
این کد به وردپرس میگه: «عزیزم، لطفاً فقط ۳ تا رونوشت آخر هر پست رو نگه دار. بیشتر شد، قدیمیترین رو پاک کن.»
define('WP_POST_REVISIONS', 3);
من خودم همیشه روی عدد ۳ یا ۵ تنظیم میکنم. اینطوری هم خیالم راحته که اگه اشتباهی کردم، چند نسخهی قبلی رو دارم، هم مطمئنم که دیتابیسم با صدها رونوشت بیخودی سنگین نمیشه.
گزینه ۲: غیرفعال کردن کامل رونوشتها (توصیه نمیکنم مگر در موارد خاص)
اگه خیلی مطمئنی که هیچوقت به نسخههای قبلی نیاز نداری، میتونی کلاً خاموشش کنی:
define('WP_POST_REVISIONS', false);
با اضافه کردن همین یه خط کد، بزرگترین منبع تولید زباله توی دیتابیست رو برای همیشه کنترل کردی.
تنظیم زمانبندی (Cron Job) برای پاکسازی خودکار و هفتگی دیتابیس
خب، حالا که جلوی زبالهی اصلی رو گرفتیم، چطور همون کارهایی که با افزونهی WP-Optimize انجام دادیم (مثل پاک کردن اسپمها، گذراهای منقضی شده و…) رو اتوماتیک کنیم؟
روش افزونهای (آسان و عالی):
خبر خوب اینه که اگه از افزونهی WP-Optimize (که تو بخش قبلی معرفی کردم) استفاده میکنی، این کار بهسادگی آب خوردنه.
- برو به منوی
WP-Optimize > Database. - بالای صفحه، روی تب
Settings(تنظیمات) کلیک کن. - یه گزینه میبینی به اسم
Schedule clean-ups(زمانبندی پاکسازیها). تیکش رو بزن. - از منوی کشویی، زمانبندی مورد نظرت رو انتخاب کن. مثلاً:
Weekly(هفتگی). - کمی پایینتر، تیکِ تمام مواردی که میخوای بهطور خودکار پاک بشن رو بزن (مثل همون رونوشتها، اسپمها، گذراها و…).
- دکمه
Save Settingsرو بزن.
تمام! تو رسماً یه ربات نظافتچی استخدام کردی که هر هفته، بدون اینکه تو اصلاً متوجه بشی، میاد و دیتابیست رو برق میندازه.
(روش حرفهایها: میتونی از «Cron Job» خود سرور هاستت هم استفاده کنی و با دستورات WP-CLI (مثل wp db optimize) این کار رو انجام بدی، اما راستش رو بخوای، همین زمانبندی افزونهی WP-Optimize اونقدر خوب کار میکنه که برای ۹۹٪ سایتها نیازی به درگیری با کرون جاب سرور نیست.)
تبدیل جداول از MyISAM به InnoDB برای کارایی بهتر
این یکی یه کم فنیتره، اما تأثیرش روی سرعت، مخصوصاً تو سایتهای بزرگ و فروشگاهی (مثل ووکامرس)، فوقالعاده است.
ببین، دیتابیس وردپرس (MySQL) برای ذخیره کردن اطلاعاتش از «موتورهای ذخیرهسازی» (Storage Engines) مختلفی استفاده میکنه. دو تا از معروفترینهاش MyISAM و InnoDB هستن.
MyISAM: این موتور قدیمیه. مثل یه فایل بایگانی سنتی میمونه. برای خوندن اطلاعات (Read) خیلی سریعه، اما وقتی میخواد یه چیزی رو بنویسه یا آپدیت کنه (Write)، کل اون جدول رو «قفل» میکنه. یعنی اگه ۱۰ تا کاربر همزمان بخوان تو سایتت یه کاری بکنن (مثلاً کامنت بذارن یا خرید کنن)، باید تو صف وایسن.InnoDB: این موتور مدرن، بهینه و پیشفرض جدیده. مثل یه سیستم بایگانی هوشمنده. میتونه همزمان چندین کار خوندن و نوشتن رو مدیریت کنه، چون بهجای کل جدول، فقط اون «ردیفی» که لازمه رو قفل میکنه. برای سایتهای فروشگاهی، انجمنها و هر سایتی که تعامل کاربر توش زیاده، «حیاتیه». ضمن اینکه خیلی امنتره و اگه دیتابیس کرش کنه، بهتر اطلاعات رو بازیابی میکنه.
چطور چک کنیم و تبدیل کنیم؟
- برو به
phpMyAdminو دیتابیست رو انتخاب کن. - تو لیست جداول، یه ستون هست به اسم
Type(نوع). - یه نگاه بنداز. اگه جلوی جداول اصلیت (مخصوصاً
wp_postsوwp_comments) نوشتهMyISAM، وقت آپگریده. (خوشبختانه اکثر هاستهای جدید خودشون موقع نصب وردپرس ازInnoDBاستفاده میکنن).
چطور تبدیل کنیم؟
هشدار: اول بکاپ بگیر!
سادهترین راه اینه که تو همون phpMyAdmin، بری به تب SQL و این دستور رو برای هر جدولی که از نوع MyISAM هست، اجرا کنی (بهجای table_name اسم جدول رو بذار):
ALTER TABLE table_name ENGINE=InnoDB;
مثلاً برای جدول پستها:
ALTER TABLE wp_posts ENGINE=InnoDB;
انجام این سه تا کار (محدود کردن رونوشتها، زمانبندی پاکسازی و آپگرید به InnoDB) یعنی تو دیگه فقط یه «کاربر» وردپرس نیستی؛ تو یه مدیر سایتی هستی که میدونه چطور زیرساخت سایتش رو برای حداکثر کارایی آماده نگه داره.
حالا یه نگاهی به سایت خودت بنداز. اولین کاری که میکنی کدومه؟ میری سراغ wp-config تا رونوشتها رو محدود کنی، یا اول چک میکنی ببینی جداولت InnoDB هستن یا هنوز روی MyISAM قدیمی گیر کردن؟ برام تو کامنتها بنویس چی پیدا کردی!
جمعبندی: چکلیست نهایی برای داشتن یک دیتابیس وردپرسی سالم و سریع
خب، حسابی گپ زدیم، نه؟ از اون انباری شلوغ و خفهکننده شروع کردیم، آستینها رو بالا زدیم، جراحی کردیم، خونهتکونی کردیم و حتی یه سیستم نظافت خودکار هم راهاندازی کردیم.
تو الان دیگه یه کاربر معمولی وردپرس نیستی؛ تو دقیقاً میدونی قلب تپندهی سایتت (دیتابیس) چطور کار میکنه و چطور باید حالش رو خوب نگه داری.
بذار همهی اون حرفها رو تو یه چکلیست ساده و کاربردی خلاصه کنم. این همون برگهی تقلب نهایی تو برای داشتن یه دیتابیس سالم و سریعه. میتونی ازش اسکرینشات بگیری یا برای خودت یه جا ذخیرهاش کنی.
چکلیست جادویی نگین برای سلامت دیتابیس 🚀
فاز صفر: آمادهسازی (همیشه و همهوقت)
- [ ] گرفتن بکاپ کامل: قبل از هر، هر، هر کاری، یه نسخه پشتیبان کامل از دیتابیست بگیر. (گفتم که، این بیمهنامه سایت توئه!)
فاز ۱: خونهتکونی اساسی (حداقل یک بار انجام بده)
- [ ] نصب یه ابزار همهکاره: افزونهی
WP-Optimize(یاWP-Rocketاگه داری) رو نصب کن. - [ ] پاکسازی عمیق با افزونه: برو تو بخش دیتابیس افزونه و اینا رو پاکسازی کن:
- [ ] همهی رونوشتهای پست (Post Revisions)
- [ ] همهی دیدگاههای اسپم و زبالهدان
- [ ] همهی دادههای گذرای (Transients) منقضی شده
- [ ] همهی موارد داخل زبالهدان (Trash)
- [ ] اجرای
Optimize Table: بعد از پاکسازی، دکمهی «بهینهسازی جداول پایگاه داده» (Optimize database tables) رو حتماً بزن تا اون فضاهای خالی هدر رفته (Overhead) هم حذف بشن.
فاز ۲: پیشگیری (تنظیم کن و فراموش کن!)
- [ ] مهمترین قدم: فایل
wp-config.phpسایتت رو باز کن و این کد رو بهش اضافه کن تا جلوی تلنبار شدن رونوشtها رو بگیری:PHPdefine('WP_POST_REVISIONS', 3); - [ ] فعال کردن نظافت خودکار: تو همون افزونهی
WP-Optimize، برو به تب «تنظیمات» (Settings) و زمانبندی (Schedule) رو فعال کن. بذارش روی «هفتگی» و تیکِ همون گزینههای پاکسازی فاز ۱ رو بزن.
فاز ۳: ارتقای حرفهای (برای عشقِ سرعتها)
- [ ] چک کردن موتور جداول: برو تو
phpMyAdminو ستونTypeرو نگاه کن. مطمئن شو که همهی جداول اصلیت (مخصوصاًwp_postsوwp_comments) از نوعInnoDBهستن، نهMyISAMقدیمی. اگه نبودن، با بکاپ کامل، تبدیلشون کن. - [ ] بازرسی
wp_options: (اگه سایتت خیلی قدیمیه یا کنده) یه نگاهی به جدولwp_optionsبنداز و ببین دادهیautoloadسنگین و یتیمی از افزونههای قدیمی اونجا جا نمونده باشه.
همین!
میبینی؟ نگهداری از دیتابیس اصلاً ترسناک نیست. فقط باید بدونی چیکار کنی. این چکلیست رو دنبال کن تا مطمئن باشی اون «انباری» و «موتورخونهی» سایتت همیشه تمیز، مرتب و آمادهی سرویسدهی به کاربراته.
حالا تو بگو، بعد از خوندن این چکلیست، اولین کاری که میری تو پیشخوان وردپرست انجام بدی چیه؟ میری سراغ محدود کردن رونوشtها یا مستقیم افزونهی بهینهساز رو نصب میکنی؟ برام بنویس!