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

اشتراک‌گذاری
چرا دیتابیس وردپرس کند می‌شود؟ دلایل و روش‌های بهینه‌سازی

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

دیتابیس وردپرس چه نقشی در سرعت سایت دارد؟

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

زمانی که کاربر صفحه‌ای را باز می‌کند، WordPress برای پیدا کردن اطلاعات موردنیاز درخواست‌هایی به دیتابیس ارسال می‌کند که به آن‌ها Query گفته می‌شود.

در یک صفحه ممکن است ده‌ها یا حتی صدها Query اجرا شود. اگر این درخواست‌ها سریع پردازش شوند، مشکلی ایجاد نمی‌شود. اما اگر تعدادی از آن‌ها سنگین باشند یا اطلاعات غیرضروری در هر بار باز شدن صفحه پردازش شود، زمان پاسخ‌گویی سرور هم می‌تواند افزایش پیدا کند.

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

دیتابیس بزرگ الزاماً دیتابیس کندی نیست!

این قسمت را حتماً نگه می‌داریم، چون یکی از بهترین نکات مقاله WP Engine است.

ممکن است وارد کنترل‌پنل شوید و ببینید حجم دیتابیس سایت به 2 یا 3 گیگابایت رسیده است. اولین واکنش معمولاً این است:

«دیتابیس خیلی بزرگ شده؛ پس دلیل کندی سایت همین است.»

اما همیشه این‌طور نیست. WP Engine در راهنمای Database Performance خودش اشاره می‌کند که یک دیتابیس بزرگ و مرتب می‌تواند سریع‌تر از یک دیتابیس بسیار کوچک‌تر اما نامنظم عمل کند. چیزی که اهمیت بیشتری دارد، میزان کاری است که دیتابیس برای پاسخ به درخواست‌های سایت انجام می‌دهد.

برای مثال حذف هزاران Revision قدیمی ممکن است حجم دیتابیس را کاهش دهد و Backup را سبک‌تر کند، اما اگر این اطلاعات در Queryهای صفحات سایت استفاده نمی‌شدند، ممکن است تغییر محسوسی در سرعت سایت مشاهده نکنید.

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

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

مشکلات دیتابیس در هر سایتی متفاوت‌اند، اما چند مورد بیشتر از بقیه دیده می‌شوند.

عامل چه اتفاقی می‌افتد؟ تأثیر احتمالی
Autoload زیاد اطلاعات غیرضروری در درخواست‌های مختلف بارگذاری می‌شوند افزایش پردازش
Queryهای سنگین افزونه یا قالب درخواست ناکارآمدی به دیتابیس می‌فرستد افزایش زمان پاسخ
اطلاعات باقی‌مانده اطلاعات افزونه‌های قدیمی در دیتابیس باقی می‌ماند افزایش حجم و شلوغی
Transientهای قدیمی داده‌های موقت بیش از حد باقی می‌مانند افزایش اطلاعات اضافی
Action Scheduler تعداد زیادی Task و Log در WooCommerce ذخیره می‌شود فشار بیشتر در فروشگاه‌های شلوغ
منابع ناکافی دیتابیس برای پردازش درخواست‌ها منابع کافی ندارد کندی در ترافیک بالا

حالا چند مورد مهم‌تر را ساده‌تر بررسی کنیم.

1. اطلاعات Autoload بیش از حد

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

مشکل وقتی شروع می‌شود که افزونه‌ها مقدار زیادی اطلاعات را به‌صورت Autoload ذخیره کنند؛ حتی اطلاعاتی که در اکثر صفحات موردنیاز نیستند.

در این شرایط WordPress مجبور می‌شود اطلاعات بیشتری را در درخواست‌های مختلف بارگذاری کند.

خبر خوب اینکه WordPress در Site Health می‌تواند زیاد شدن Autoload Data را گزارش کند. WP Engine نیز Autoload را یکی از اولین مواردی می‌داند که هنگام بررسی Performance دیتابیس باید بررسی شود.

چطور بررسی کنیم؟

در پیشخوان وردپرس وارد این قسمت شوید:

ابزارها ← سلامت سایت (Site Health)

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

حذف تصادفی اطلاعات wp_options می‌تواند تنظیمات سایت یا افزونه‌ها را خراب کند.

2. افزونه‌ای که Queryهای سنگین اجرا می‌کند

گاهی دیتابیس کاملاً سالم است اما یک افزونه درخواست‌های نامناسبی برای آن ایجاد می‌کند.

مثلاً تصور کنید صفحه‌ای 50 محصول نمایش می‌دهد.

یک افزونه می‌تواند اطلاعات موردنیاز را با چند Query مناسب دریافت کند؛ افزونه دیگری ممکن است برای هر محصول چند درخواست جداگانه به دیتابیس بفرستد.

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

برای پیدا کردن چنین مواردی می‌توان از ابزارهایی مثل Query Monitor استفاده کرد تا Queryهای کند و افزونه‌ای که آن‌ها را ایجاد کرده بهتر شناسایی شوند.

3. اطلاعات افزونه‌هایی که دیگر استفاده نمی‌شوند

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

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

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

4. Transientهای قدیمی

Transient را می‌توان به زبان ساده نوعی اطلاعات موقت در WordPress در نظر گرفت. مثلاً افزونه‌ای اطلاعاتی را از یک API دریافت می‌کند و به‌جای دریافت مجدد آن در هر بار باز شدن صفحه، نتیجه را برای مدتی ذخیره می‌کند.

این کار معمولاً برای Performance مفید است. اما Transientهای منقضی‌شده یا داده‌هایی که به‌درستی مدیریت نشده‌اند می‌توانند به‌مرور در دیتابیس جمع شوند.

WordPress مکانیزم پاک‌سازی Transientهای منقضی‌شده را دارد، ولی شرایطی مثل اختلال در WP-Cron یا نحوه پیاده‌سازی بعضی افزونه‌ها می‌تواند باعث باقی ماندن داده‌های اضافی شود.

5. Action Scheduler در فروشگاه‌های WooCommerce

در فروشگاه‌های WooCommerce قضیه کمی جدی‌تر می‌شود. WooCommerce و بسیاری از افزونه‌های آن برای انجام فعالیت‌های پس‌زمینه از Action Scheduler استفاده می‌کنند.

کارهایی مثل ارسال بعضی ایمیل‌ها، Webhookها، تمدید اشتراک، همگام‌سازی موجودی و فعالیت‌های زمان‌بندی‌شده می‌توانند از این سیستم استفاده کنند.

هرچه فروشگاه فعالیت بیشتری داشته باشد، اطلاعات بیشتری نیز ممکن است در جداول مربوط به Action Scheduler ثبت شود.

WP Engine حتی به یک نمونه مستند اشاره کرده که دو جدول مربوط به Action Scheduler مجموعاً به 55GB رسیده بودند. این نمونه افراطی است، اما به‌خوبی نشان می‌دهد چرا وضعیت این جداول در فروشگاه‌های بزرگ ارزش بررسی دارد.

اگر یک فروشگاه تعداد زیادی سفارش، محصول و کاربر هم‌زمان دارد، استفاده از زیرساخت مناسب هاست ووکامرس اهمیت بیشتری پیدا می‌کند؛ چون صفحات مهمی مثل Cart، Checkout و My Account را نمی‌توان مثل یک صفحه محتوایی معمولی به‌طور کامل Cache کرد.

آیا پاک‌سازی دیتابیس باعث افزایش سرعت وردپرس می‌شود؟

گاهی بله؛ اما همیشه نه. فرض کنید دیتابیس شما 3GB است و با پاک کردن Revisionها، Spamها و اطلاعات قدیمی آن را به 2GB کاهش می‌دهید.

این کار مزایایی دارد:

  • Backup سبک‌تر می‌شود.
  • انتقال سایت ساده‌تر می‌شود.
  • دیتابیس مرتب‌تر می‌شود.
  • پیدا کردن مشکلات واقعی راحت‌تر می‌شود.

اما نمی‌توان تضمین کرد سایت سریع‌تر شود. اگر عامل کندی یک Query سنگین باشد، حذف 1GB اطلاعاتی که آن Query اصلاً از آن‌ها استفاده نمی‌کند، مشکل را برطرف نخواهد کرد.

چطور بفهمیم مشکل واقعاً از دیتابیس است؟

چطور بفهمیم مشکل واقعاً از دیتابیس است؟

قبل از نصب افزونه Database Cleaner و شروع به حذف اطلاعات، چند بررسی ساده انجام دهید.

اول TTFB یا Server Response Time سایت را بررسی کنید. اگر سرور دیر شروع به پاسخ‌گویی می‌کند ولی بعد از دریافت پاسخ، صفحه سریع Render می‌شود، احتمال وجود یک مشکل Server-side مثل PHP یا Database بیشتر می‌شود.

بعد Site Health را برای Autoload Data بررسی کنید. در مرحله بعد، اگر دسترسی دارید، حجم جدول‌های دیتابیس را ببینید. دنبال یک عدد مشخص نباشید؛ دنبال جدولی باشید که نسبت به بقیه غیرعادی بزرگ شده است.

مثلاً:

  • wp_options
  • wp_postmeta
  • wp_actionscheduler_actions
  • wp_actionscheduler_logs

بزرگ بودن هرکدام به‌تنهایی اثبات نمی‌کند مشکلی وجود دارد، اما می‌تواند سرنخی برای بررسی بیشتر باشد.

در نهایت ابزارهایی مانند Query Monitor یا ابزارهای مانیتورینگ سرور می‌توانند مشخص کنند زمان پردازش واقعاً کجا مصرف می‌شود.

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

  1. قبل از هر تغییری Backup بگیرید. تغییرات دیتابیس همیشه باید امکان بازگشت داشته باشند.
  2. Site Health را بررسی کنید. مخصوصاً هشدارهای مربوط به Autoload Data.
  3. جدول‌های غیرعادی بزرگ را پیدا کنید. بزرگ بودن به‌تنهایی مشکل نیست؛ دلیل رشد آن‌ها مهم است.
  4. افزونه‌های بلااستفاده را بررسی کنید. ببینید اطلاعاتی از افزونه‌های حذف‌شده باقی مانده یا خیر.
  5. Queryهای کند را پیدا کنید. اگر Cleanup تأثیری ندارد، احتمالاً باید دنبال پردازش سنگین باشید.
  6. Cache را بررسی کنید. Page Cache و Object Cache می‌توانند تعداد دفعات مراجعه به دیتابیس را کاهش دهند.
  7. بعد از هر تغییر دوباره تست کنید. اگر چیزی اندازه‌گیری نشود، نمی‌توان فهمید تغییر واقعاً مؤثر بوده است.
  8. این ترتیب مهم است؛ چون قرار نیست صرفاً دیتابیس را کوچک کنیم، می‌خواهیم دلیل پردازش اضافه را پیدا کنیم.

Object Cache چه کمکی به دیتابیس می‌کند؟

یکی از راهکارهای مهم برای سایت‌هایی که مرتب اطلاعات یکسانی از دیتابیس می‌خواهند، Persistent Object Cache است.

سرویس‌هایی مانند Redis می‌توانند نتیجه بعضی درخواست‌های دیتابیس را در حافظه نگه دارند. در نتیجه WordPress برای دریافت همان اطلاعات مجبور نیست هر بار دوباره به دیتابیس مراجعه کند.

اما اینجا هم نباید به یک نتیجه ساده برسیم: Redis فعال = دیتابیس بهینه اگر افزونه‌ای Queryهای نامناسب ایجاد کند یا دیتابیس مشکل ساختاری داشته باشد، Object Cache الزاماً تمام مشکلات را برطرف نمی‌کند.

به همین دلیل Cache و بهینه‌سازی دیتابیس باید در کنار یکدیگر بررسی شوند.

چرا دیتابیس WooCommerce حساس‌تر است؟

یک سایت شرکتی ممکن است بیشتر صفحات ثابتی داشته باشد که به‌راحتی Cache می‌شوند. فروشگاه متفاوت است.

صفحات زیر اطلاعات پویا دارند:

سبد خرید → تسویه‌حساب → حساب کاربری → سفارش‌ها

در این صفحات اطلاعات هر کاربر متفاوت است و نمی‌توان همه‌چیز را مثل یک مقاله معمولی از Page Cache تحویل داد.

ممکن است Homepage یک سایت به دلیل Cache بسیار سریع باشد، اما Cart، Checkout یا صفحات کاربران واردشده کند باشند؛ چون این درخواست‌ها بیشتر به PHP و Database وابسته‌اند.

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

چه زمانی مشکل از سطح هاست و سرور است؟

تا اینجا بیشتر درباره چیزهایی صحبت کردیم که داخل WordPress قابل بررسی هستند.

اما بخشی از عملکرد دیتابیس وردپرس به زیرساخت هم مربوط می‌شود؛ مثل منابع CPU و RAM، سرعت Storage، تنظیمات Database Server، Object Cache و تعداد درخواست‌های هم‌زمان.

بخشی از بهینه‌سازی در سطح WordPress انجام می‌شود و بخش دیگری نیازمند دسترسی و تنظیمات Server است.

اگر سایت کوچک است، معمولاً ابتدا باید مشکلات نرم‌افزاری و Queryها بررسی شوند. اما در یک سایت پرترافیک یا فروشگاه بزرگ، ممکن است بعد از بهینه‌سازی WordPress همچنان به منابع بیشتری نیاز داشته باشیم.

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

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

چند اشتباه رایج در بهینه‌سازی دیتابیس وردپرس

کار چرا همیشه راه‌حل نیست؟
حذف تمام Revisionها حجم را کم می‌کند ولی الزاماً Queryها را سریع نمی‌کند
نصب چند افزونه Cleaner ممکن است خودشان کار اضافه ایجاد کنند
حذف دستی wp_options احتمال خراب شدن تنظیمات وجود دارد
فعال کردن Redis و تمام Object Cache همه Queryهای بد را اصلاح نمی‌کند
ارتقای فوری هاست اگر مشکل از افزونه باشد فقط منابع بیشتری به همان پردازش می‌دهیم
Optimize کردن مداوم Tables جای پیدا کردن Query یا داده مشکل‌دار را نمی‌گیرد

جمع‌بندی؛ دیتابیس را فقط کوچک نکنید!

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

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

بنابراین اگر سایت کند شده، قبل از Cleanup گسترده ابتدا Autoload، Queryهای کند، جداول غیرعادی و پردازش‌های پس‌زمینه را بررسی کنید. در WooCommerce نیز Action Scheduler و عملکرد صفحات بدون Cache اهمیت بیشتری پیدا می‌کنند.

و اگر بعد از بهینه‌سازی سایت همچنان Database و PHP تحت فشار هستند، آن زمان بررسی منابع و زیرساخت میزبانی تصمیم منطقی‌تری است.

سوالات متداول

آیا بزرگ شدن دیتابیس وردپرس باعث کند شدن سایت می‌شود؟

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

چگونه دیتابیس وردپرس را بهینه کنیم؟

بهتر است ابتدا Backup بگیرید و سپس Autoload Data، جدول‌های غیرعادی، اطلاعات افزونه‌های قدیمی، Transientها و Queryهای کند را بررسی کنید. پاک‌سازی بدون پیدا کردن عامل اصلی همیشه باعث افزایش سرعت نمی‌شود.

از کجا بفهمیم دیتابیس وردپرس باعث کندی سایت شده است؟

TTFB، Site Health، Queryهای کند و حجم جدول‌های دیتابیس می‌توانند سرنخ‌های خوبی باشند. ابزارهایی مانند Query Monitor نیز برای پیدا کردن Queryهای کند مفید هستند.

آیا پاک کردن Revisionها باعث افزایش سرعت وردپرس می‌شود؟

ممکن است حجم دیتابیس و Backup را کاهش دهد، اما الزاماً سرعت صفحات را بیشتر نمی‌کند؛ مخصوصاً اگر Queryهای سایت از آن اطلاعات استفاده نکنند.

Autoload در دیتابیس وردپرس چیست؟

بعضی تنظیمات ذخیره‌شده در wp_options به‌صورت خودکار در درخواست‌های WordPress بارگذاری می‌شوند. اگر حجم این اطلاعات بیش از حد افزایش پیدا کند، می‌تواند پردازش غیرضروری ایجاد کند.

Redis باعث افزایش سرعت دیتابیس وردپرس می‌شود؟

Persistent Object Cache مانند Redis می‌تواند تعداد مراجعات تکراری به دیتابیس را کاهش دهد، اما جای اصلاح Queryهای سنگین یا مشکلات افزونه‌ها را نمی‌گیرد.

چرا دیتابیس WooCommerce بیشتر به بهینه‌سازی نیاز دارد؟

فروشگاه‌ها اطلاعات و پردازش‌های پویای بیشتری مانند سفارش‌ها، کاربران، Cart، Checkout و Scheduled Actions دارند. به همین دلیل عملکرد دیتابیس در WooCommerce با رشد فروشگاه اهمیت بیشتری پیدا می‌کند.

اشتراک‌گذاری

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این محتوا را به اشتراک بگذارید!
اگر این مطلب برایتان مفید بود، می‌توانید آن را با دیگران به اشتراک بگذارید.