אופטימיזציה למסד הינו תהליך אשר יש לבצע בתדירות קבועה באתרי וורדפרס על מנת לשמור על זמן הטעינה.
וורדפרס הינה מערכת מעולה, הוא מתוכננת וכתובה בצורה טובה מאוד, וגם המסד נתונים שלה בנוי בצורה מאוד חכמה.
אך עם כל הפיצ׳רים שלה והתוספים השונים, לפעמים יוצא מצב שהמסד נתונים מתנפח ומשפיע בצורה משמעותית על זמן הטעינה, במיוחד כאשר וורדפרס או תוספים לא מנקים אחריהם.
למה לבצע אופטימיזציה למסד?
כאשר עובדים עם הפאנל ניהול של וורדפרס, ישנן פעולות רבות אשר אנו מבצעים, כגון מחיקת פוסט.
פעולות אלו יודעות לנקות את המידע מהמסד, אך לפעמים כאשר באמצע הפעולה מבצעת שגיאה או כל סיבה אחרת, הפעולות שאמורות להתבצע לא מבוצעות במלואן.
לכן יוצא מצב שוורדפרס לא מצליחה לנקות בצורה מלאה את המידע מהמסד.
דוגמא נוספת היא כאשר מפתחים תוספים לא מגידירים פונקציה אשר תרוץ ותנקה את המסד ממידע שהתוסף יצר כאשר השתמשנו בו, מצב זה מביא לכך שמסד הנתונים מתנפח ומתחיל לקרטע.
אופטימיזציה למסד משפיע בצורה ישירה ומאוד משמעותית על זמן הטעינה של העמוד ועיבוד בקשה.
מכיוון ש-90% מהפעולות שמבוצעות בוורדפרס הן פעולות מול מסד הנתונים, שליפות והצגה של מידע, עדכון מידע במסד, הוספת מוצר לעגלה וכד׳.
כמו שאנחנו יודעים לטפל באתר שלנו ולמחוק תוספות לא רלוונטיות, תמונות שלא השתמשנו בסוף, וכד׳, עלינו להתייחס גם למסד הנתונים, מכיוון שבקלות המסד יכול להתנפח למימדים אדירים ולהשפיע על ביצועי האתר.
דוגמא מעולה להשפעת אופטימיזציה למסד על זמן הטעינה הוא כאשר הצלחתי למחוק ממסד נתונים של לקוח שלי 1.5 מיליון רשומות שתוסף מסויים ייצר על מנת לנהל קאשינג.
התוסף לא לא ניקה את המסד בסוף העבודה, ע״י מחיקת המידע הזה ולכן הוא התנפח למימדים מטורפים.
ע״י ניקוי הטבלה הצלחתי להביא למצב של מחיקה של קרוב ל-200 מגה בייט מנפח המסד ולשיפור של 1.2 שניות בזמן הטעינה.
שאילתות אופטימיזציה למסד
במהלך מאמר זה אני משתמש בתחילית (Prefix) ברירת המחדל של וורדפרס wp_
.
במידה ואצליכם התחילת היא שונה, יש לשנות אותה בשאילתות לתחילית שלכם.
את כל השאילתות הבאות יש להריץ דרך ה-PHPMyAdmin.
שימו לב! יש לבצע גיבוי של המסד נתונים לפני שמריצים את שאלות אלו!
בנוסף, אם אתם לא בטוחים איך לעשות את זה, עדיף לשלם לאיש מקצוע שיעשה את זה עבורכם.
מחיקת היסטוריית עריכה
בברירת המחדל כאשר מעדכנים, עמוד או פוסט בוורדפרס, נוצרת גרסה שנשמרת במסד של לפני השינויים, וזה על מנת לאפשר ״לחזור אחורה בזמן״, ולראות הסטוריית עריכות, זהו פיצ׳ר מאוד נחמד, אך הוא יכול להגיע למצב שהוא מנפח את המסד נתונים בצורה מהירה מאוד, במיוחד אם לא מגבילים אותו.
השאילתה הבאה תאפשר לנו למחוק את כל היסטוריות העריכה ובעצם לנקות את המסד.
שאילתה זו הינה אחת השאילתות המרכזיות באופטימיזציה למסד, אשר יכולה לשפר פלאות את זמן הטעינה.
DELETE FROM `wp_posts`
WHERE `post_type` = 'revision';
מחיקת מטא דאטה
לרוב כאשר מוחקים פוסט או עמוד או כל Custom Post Type מהמסד, נמחק בצורה אוטומטית גם המטא דאטה, אך ישנם מקרים כאשר זה לא קורה, וזה יוצר מצב שיש לנו במסד נתונים מידע אשר לא רלוונטי יותר.
לכן עלינו למחוק אותו בצורה ידנית, אך למצוא אותו יכול להיות לפעמים סיפור, במיוחד אם עושים את זה ידנית.
השאילתה הבאה תאפשר לנו למצוא ולמחוק אוטומטית את המידע הסורר.
מחיקת מטא דאטה של פוסטים
DELETE `wp_postmeta`
FROM `wp_postmeta`
LEFT JOIN `wp_posts`
ON `wp_posts`.ID = `wp_postmeta`.post_id
WHERE `wp_posts`.ID IS NULL;
מחיקת מטא דאטה של תגובות
DELETE `wp_commentmeta`
FROM `wp_commentmeta`
LEFT JOIN `wp_comments`
ON `wp_comments`.comment_ID = `wp_commentmeta`.comment_id
WHERE `wp_comments`.comment_ID IS NULL;
מחיקת וריאציות מוצרים
ווקומרס הינו תוסף האי-קומרס הכי נפוץ היום עבור וורדפרס, ועם כמה שהוא תוסף מתקדם ומעולה, לפעמים גם הוא לא מתנהג טוב.
לפעמים קורה שבעת עריכה של מוצר או מחיקה של מוצר, הוריאציות של המוצר לא ימחקו.
ייתכן ובמקרה הזה יווצר מצב שבו יהיה לנו מידע סורר במסד, גם בטבלת הפוסטים וגם בטבלת המטא דאטה.
השאילתה הבאה תחפש וריאציות מוצרים אשר אין להם מוצר אב, ותמחק אותן מהמסד.
DELETE parent
FROM `wp_posts` parent
LEFT OUTER JOIN `wp_posts` child
ON child.post_parent = parent.ID
WHERE parent.id IS null
AND child.post_type = 'product_variation';
מחיקת פינגים וטראקבקים
במידה ולא כיביתם את שני הפיצ׳רים מימי ביניים, Pingbacks ו-Trackbacks, והאתר שלכם קיבל כמה קישורים וכעת הם סתם יושבים לכם במסד, אתם יכולים למחוק אותם ע״י הרצת השאילתה הבאה:
DELETE FROM `wp_comments`
WHERE `comment_type` IN ( 'pingback', 'trackback' );
מחיקת Transients
לוורדפרס יש פיצ׳ר מאוד מגניב שנקרא Transients, הוא מאפשר לכם לשמור מידע בצורה זמנית במסד וככה בעצן לבצע קאשינג למידע מסויים.
אך לפעמים כאשר מכבים תוספים, הם שוכחים לנקות אחריהם, או שבעקבות שגיאה מסויימת המידע לא נמחק.
לכן עלינו לנקות את המסד מהמידע הזה, לכן מה שנעשה זה נריץ את השאילתה הבאה שתמחק את כל ה-Transients מהמסד.
DELETE FROM `wp_options`
WHERE `option_name` LIKE '%\_transient\_%';
מחיקת Transients שפגו תוקף מהמסד הינו צעד אשר ישפיע בצורה ישירה על מהירות טעינת האתר וכמות המשאבים שהאתר שלכם צורך.
כאשר טבלת wp_options
מתמלאת ומתנפחת, נוצר מצב שעקב פיתוח לא נכון של תוספים, בכל טעינת עמוד, וורדפרס טוענת את הערכים שנשמרים לזיכרון.
שלב זה גורם למצב שכמות הזיכרון שהאתר דורש לאט לאט מתנפח, וגם טעינת הערכים לזיכרון תקח יותר זמן.
לכן מבין כל השאילתות, השאילתה הנ״ל היא אחת הקריטיות כאשר מבצעים אופטימיזציה למסד.
תוספי אופטימיזציה למסד
ישנן מספר תוספים אשר קיימים לוורדפרס אשר מבצעים אופטימיזציה למסד בקלות.
לרוב תוספים אלו הינם חינמיים ומאפשרים לבצע את האופטימיזציה בקלות ע״י לחיצה על כפתור.
יתרון נוסף לתוספים אלו הם שהם מאפשרים להוריד גיבוי של המסד ממש לפני ביצוע האופטימיזציה.
זאת על מנת למנוע מצב שיווצר נזק בלתי הפיך לאתר שלכם.
WP-Rocket
התוסף הראשון והמעולה הוא WP-Rocket, תחת ״מסד נתונים״ ניתן לראות את האפשרויות לאופטימיזציה למסד.
בין האפשרויות השונות הם מחיקת היסטוריית עריכה (Revisions), מחיקת טיוטות אוטומטית ואף ייעול טבלאות (Optimize).
אחד היתרונות הבולטים התוסף זה שהוא מאפשר לכם אפילו לתזמן אוטומטית ניקוי של המסד.
WP-Optimize
התוסף אשר מוקדש כמעט כולו לאופטימיזציה למסד, התוסף כולל את כל האפשרויות שכתבתי עליהם.
הוא מאפשר גם לראות את המסד הנתונים ע״י הצגת רשימת הטבלאות, כמות הרשומות וגודל הטבלאות.
סיכום
הרצת השאילתות הבאות כולל ביצוע של פעולת Optimize לטבלאות המסד בסוף יכולים להביא לשיפור משמעותי בזמני הטעינה ובזמן עיבוד בקשות בשרת.
כאשר תתחילו לחשוב על האתר ומסד הנתונים שלכם כמו הבית שלכם ותזכרו שגם אותו צריך לתחזק ולנקות, תתחילו לראות שיפורים בעבודה האתר שלכם.
אני ממליץ אחת לרבעון לבצע אופטימיזציה למסד ע״י הרצת השאילתות הנ״ל על מנת להגיע למצב של שגרת תחזוקה.
זה פלוס מינוס מה ש wp rocket עושה ?
היי ישראל,
כן, WP-Rocket מאפשר לך לעשות את הרוב פה, אך יש שאילתות שהוא לא מבצע.