نحوه بهینه سازی دیتابیس (بانک اطلاعاتی) در وردپرس

دیتابیس وب سایت وردپرس شما دربردارنده اطلاعاتی مانند محتوای پست، کاربران، سفارشات و تنظیمات تم و پلاگین است. در حالی که کد PHP به سایت می گوید که چگونه عمل کند و CSS به کد می گوید که چگونه به نظر بیاید، بانک اطلاعاتی اطلاعات محتوای صفحه را در اختیار دارد. بانک اطلاعاتی باید سبک باشد که بتواند با هر صفحه ای سریعا تعامل کند و تاثیر منفی بر روی عملکرد سایت نداشته باشد.
برای درخواست یا «پرس و جو» اطلاعات از بانک اطلاعاتی از زبان SQL استفاده می شود. مهم است که درخواست های SQL نیز سبک باشند که اطمینان حاصل شود صفحات به صورت موثر بارگذاری می شوند.
برای بهینه سازی بانک اطلاعاتی تان نیاز دارد که queries کوئری را از phpMyAdmin اجرا کنید.
با بهینه سازی کردن دیتابیس و درخواست های SQL که با آن ارتباط برقرار می کنند می توانید زمان بارگذاری سایت خود، زمان بیت نخست (TTFB) و تجربه کلی کاربر را بهبود دهید.
توجه: قبل از دستکاری کردن دیتابیس از آن بک آپ بگیرید.
بهینه سازی جداول دیتابیس
استفاده از دستور جدول بهینه یک تمرین خوب برای سلامت و عملکرد دیتابیس است.جداول Optimize Table ، جدول های انتخاب شده را مجددا ایجاد می کنند و هر فضای اضافه ای که توسط جدول استفاده شده است را حذف می کنند. آزاد کردن فضای اضافه دیسک از طریق کاهش مقدار دادههایی که هنگام استفاده از جداول در حافظه ذخیره شده است باعث بهبود عملکرد می شود.
برای بهینه سازی جداول دیتابیس :

بهینه سازی جداول دیتابیس
حافظه و موتورهای ذخیره جدول دیتابیس
دو موتور اولیه ذخیره جدول وجود دارد: MyISAM و InnoDB. اینکه سایت شما از چه موتور ذخیره ای استفاده می کند تفاوت زیادی در عملکرد ایجاد می کند زیرا روش نوشتن داده و استفاده از منابع سرور در موتورهای مختلف متفاوت است. موتورهای وردپرس همیشه پیشنهاد می کند که از موتور ذخیره جدول InnoDB استفاده شود.
MyISAM تنها برای عملکردهای خواندن دیتابیس خوب عمل می کند، اما وقتی حرف از نوشتن یا به روز رسانی دیتابیس می شوند کل جدول قفل می شود تا اینکه فرآیند کامل شود. این مسئله از هرگونه عملکرد خواندن/نوشتن دیگری از ابتدای جدول تا وقتی که فرآیند به پایان برسد جلوگیری می کند. InnoDB تنها ردیفی که نوشته می شود را قفل می کند و می توان به صورت همزمان از بقیه جدول استفاده کرد.
تفاوت عمده دیگر این دو موتور ذخیره نحوه تعامل آن ها با حافظه سرور است. در جداول InnoDB مخزن مشخصی از حافظه به نام InnoDB Buffer Pool وجود دارد که می تواند استفاده شود. جدول هایی که از MyISAM استفاده می کنند نمی توانند از این مخزن ذخیره استفاده کنند، یعنی به جای استفاده از حافظه بانک اطلاعاتی روی دیسک می نویسند (مبادله) هنگامی که جدولی یافتید که از MyISAM استفاده می کند، جدول را به InnoDB تبدیل کنید. عنوان جدول را با عنوان متناظر عوض کنید.
برای تبدیل جدول به InnoDB لطفا کلمه table_name نام جدول خود را جایگزین کنید
ALTER TABLE table_name ENGINE=InnoDB;
پاک سازی دیتابیس
برای عملکرد دیتابیس شما مهم و مفید است که داده های اضافی را پاک کنید و حجم زیاد دیتابیس را گاه به گاه کم کنید MySQL یک سیستم بانک اطلاعاتی ارتباطی است، به این معنی که داده ی موجود در یک جدول معمولا با داده دیگری ارتباط دارد. وقتی یک مقدار، مثلا یک پست، از یک جدول حذف شود ممکن است داده های دیگری را تنها رها کند (ارتباط از بین برود).
Check if your site has any orphaned postmeta: SELECT COUNT(pm.meta_id) as row_count FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL; Delete any orphaned postmeta: DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL; Check if your site has any orphaned commentmeta: SELECT COUNT(*) as row_count FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments); Delete any orphaned commentmeta: DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments); By default WP Engine disables revisions due to database bloat, but your site may have had revisions from a previous host. Delete any revisions: DELETE FROM wp_posts WHERE post_type = "revision"; Check for wp_session data: SELECT * FROM `wp_options` WHERE `option_name` LIKE '_wp_session_%' Remove wp_session data: DELETE FROM `wp_options` WHERE `option_name` LIKE '_wp_session_%' Delete expired transients: DELETE FROM `wp_options` WHERE `option_name` LIKE ('%_transient_%') Delete tags that aren’t associated with any posts: DELETE FROM wp_terms WHERE term_id IN (SELECT term_id FROM wp_term_taxonomy WHERE count = 0 ); DELETE FROM wp_term_taxonomy WHERE term_id not IN (SELECT term_id FROM wp_terms); DELETE FROM wp_term_relationships WHERE term_taxonomy_id not IN (SELECT term_taxonomy_id FROM wp_term_taxonomy); Delete pingbacks and trackbacks: DELETE FROM wp_comments WHERE comment_type = 'pingback'; DELETE FROM wp_comments WHERE comment_type = 'trackback';
افزونه های بهینه سازی دیتابیس
واضح است اجرای درخواست های زیاد می تواند ترسناک باشد مخصوصا اگر قبلا با بانک اطلاعاتی کار نکرده باشید. پلاگین هایی وجود دارد که می توانند به شما کمک کنند هرچند پلاگین ها ممکن است داده ها را سریعتر از وقتی که درخواست های SQL را در یک زمان اجرا می کردید، پاک کنند. قبل از ادامه کار بک آپ تهیه کنید.علاوه بر این شدیدا توصیه می کنیم هر تغییری را ابتدا در محیط مرحله بندی یا توسعه تست کنید قبل از آنکه بصورت زنده آن را انجام دهید.
- WP Rocket
- WP Optimize
- WP Sweep
- Advanced Database Cleaner
داده های بارگزاری شده خودکار
در هر درخواستی اطلاعات خاصی از دیتابیس باید بارگذاری شود مانند URL سایت و پلاگین ها و تم فعال. در وردپرس به این مورد داده های خودکار گفته می شود و در جدول wp_options ذخیره شده است.
در حالی که داده های خودکار در برخی موارد مفید هستند، برای بیشتر اطلاعات لازم نیست که این داده ها روی هر درخواست تکی بارگذاری شوند. توصیه می شود که برای عملکرد بهینه، داده خودکار کلی خود را زیر ۸۰۰۰۰۰ بیت ( ۸ مگابایت) نگه دارید
برای هر ردیف در جدول options(گزینه ها) یک مقدار متناظر در ستون autoload قرار دارد که می تواند بله یا خیر باشد. برای برداشتن قابلیت بارگذاری خودکار می توانید مقدار این ستون را به سادگی به خیر تغییر دهید.
حذف کردن این قابلیت از یک ردیف داده آن را از بانک اطلاعاتی حذف نمی کند، بلکه دیگر اطلاعات به صورت خودکار در هر صفحه بارگذاری نمی شود. فقط در حالتی که درخواست شود در کجا بارگذاری خودکار در حالت خیر قرار دارد، داده در صفحه قرار می گیرد.
نهایتا به شما یا به توسعه دهنده مربوط است که مشخص کنید چه اطلاعاتی روی سایتتان نیازمند بارگذاری شدن است و کدامیک را می توان بدون صدمه زدن به ساختار و عملکرد بارگذاری نکرد. در زیر چند درخواست مفید برای دستگاری داده بارگذاری خودکار قرار داده ایم.
توجه: قبل از دستکاری کردن دیتابیس از آن بک آپ بگیرید.
Calculate the total amount of autoloaded data in bytes: SELECT SUM(LENGTH(option_value)) FROM wp_options WHERE autoload = 'yes'; Find and sort the top 20 largest autoload value rows: SELECT LENGTH(option_value),option_name FROM wp_options WHERE autoload='yes' ORDER BY length(option_value) DESC LIMIT 20; Disable autoload on a specific option. Replace option_name with the actual option name found using the previous command: UPDATE wp_options SET autoload='no' WHERE option_name='option_name'; EX: UPDATE wp_options SET autoload='no' WHERE option_name='really_large_row'; After you’ve reduced your total autoload data below 800k bytes, ensure your options table is indexed. This helps your site serve your freshly cleaned autoloaded data more quickly. CREATE INDEX autoloadindex ON wp_options(autoload, option_name);
کش مخزن
مخزن موضوع، نتایج درخواست ها را برای دسترسی سریعتر بعدی ذخیره می کند. یک بافر تا حجم ۱ مگابایت دارد و تمام صفحات سایت شما را تحت تاثیر قرار می دهد حتی صفحاتی که مشمول ذخیره صفحه معمولی نیستند مثل صفحه wp-admin.
درخواست های ذخیره در توابعwp_cache()
تعریف شده در وردپرس پیچیده می شوند تا ذخیره شوند، و همچنین به صورت گذرا استفاده شوند.
ذخیره موضوع به صورت دیفالت فعال نیست. برای بهبود عملکرد عموما توصیه می شود آن را فعال کنید.
توجه: اگر بالای ۸۰۰۰۰۰ بیت داده را بارگذاری خودکار کرده اید، ذخیره موضوع باید غیرفعال باشد. ذخیره موضوع یک بافر ۱ مگابایتی دارد و داده های خودکار بالا سریعا از این حد تجاوز می کنند که باعث ایجاد ۵۰۲ ثانیه فوری و تصادفی می شود.