אופטימיזציה למסד נתונים בוורדפרס היא בעיקר עבודת ניקיון: להסיר מה שתוספים השאירו, לצמצם את מה שנטען בכל כניסה, ולוודא שאין שאילתות כבדות שחוזרות על עצמן. לפני שכתבתי את המאמר בדקתי את מסד הנתונים של האתר הזה, ומה שמצאתי מראה טוב איפה הבעיה מסתתרת בדרך כלל.

אל תתנו למהירות לעכב אתכם. השאירו פרטים לשדרוג האתר.
מה מצאתי במסד הנתונים של האתר הזה
מסד הנתונים שוקל כ-30 מגה, ויש בו 202 טבלאות. לאתר עם 53 עמודים זה הרבה. כשבדקתי מאיפה כל טבלה הגיעה, התברר ש-116 מהן שייכות לתוספים שכבר לא מותקנים: תוסף ניוזלטר, חנות ווקומרס, תוסף אבטחה, שני תוספי SEO קודמים וסליידר.
הטבלאות האלה שוקלות יחד כ-7.9 מגה, יותר מרבע ממסד הנתונים. הן לא נטענות בעמודים, ולכן הן לא מאטות את האתר ישירות, אבל הן מאריכות גיבויים, העברות ושחזורים. הטבלאות של וורדפרס עצמה, עם כל העמודים וההגדרות, תופסות כ-16 מגה.

הטבלה שנטענת בכל כניסה
הטבלה שבאמת משפיעה על המהירות היא טבלת ההגדרות. וורדפרס טוענת חלק ממנה בכל כניסה לכל עמוד, עוד לפני שהיא מתחילה לבנות אותו. באתר הזה נטענות כך 1,245 הגדרות, בסך הכל כ-694 קילובייט, בכל בקשה שלא מגיעה מהמטמון.
שתי ההגדרות הגדולות ביותר שוקלות כ-130 קילובייט כל אחת, ואחת מהן היא קטלוג של תוסף שהוסר מזמן. מגרסה 6.6, וורדפרס מפסיקה לטעון אוטומטית הגדרות שנשמרות מעל 150 קילובייט, אבל הגדרות קטנות מזה, וכאלה שנשמרו לפני כן, ממשיכות להיטען. לכן כדאי לבדוק את הרשימה ידנית.
מה מנקים ובאיזה סדר
גיבוי לפני הכל
לפני כל ניקוי שומרים גיבוי של מסד הנתונים מחוץ לשרת. מחיקה של טבלה או הגדרה לא נכונה יכולה לשבור תוסף פעיל, ובחנות גם לאבד הזמנות. אם האחסון מאפשר סביבת בדיקה, עדיף לנקות שם קודם ולוודא שהאתר עובד.
טבלאות של תוספים שהוסרו
מזהים אותן לפי הקידומת בשם, שבדרך כלל דומה לשם התוסף. לפני מחיקה בודקים שהתוסף באמת לא מותקן, גם לא כבוי, ושאין תוסף אחר שמשתמש באותה טבלה. למשל, טבלאות המשימות המתוזמנות משמשות כמה תוספים יחד, ואסור למחוק אותן.
הגדרות שנטענות בלי צורך
מסדרים את ההגדרות שנטענות אוטומטית לפי גודל, ובודקים את העשר הגדולות. הגדרות של תוספים שהוסרו אפשר למחוק. הגדרות של תוספים פעילים שלא נחוצות בכל עמוד אפשר להעביר לטעינה לפי דרישה. זה החלק שמשפיע הכי הרבה על זמן התגובה של השרת.
גרסאות, טיוטות ונתונים זמניים
וורדפרס שומרת גרסה של עמוד בכל שמירה, ותוספים שומרים נתונים זמניים שפג תוקפם. באתר הזה יש רק 19 גרסאות ו-13 נתונים זמניים שפגו, אבל באתרים עם אלפי פוסטים זה מגיע למאות אלפי שורות. את זה רוב תוספי אופטימיזציה למסד נתונים, כמו WP-Optimize, מנקים בבטחה.
כשמסד הנתונים איטי ולא רק מלא
לפעמים הבעיה היא לא הגודל אלא השאילתות. תוסף שמריץ שאילתה כבדה בכל עמוד, או חיפוש שעובר על כל הטבלה, יאט את האתר גם במסד נתונים נקי. תוסף כמו Query Monitor מציג לכל עמוד את השאילתות האיטיות ואת התוסף שהריץ אותן.
באתרים עם הרבה בקשות שלא נשמרות במטמון, כמו חנויות ואזורי לקוחות, מטמון אובייקטים כמו Redis חוסך שאילתות חוזרות. זה השלב הבא אחרי אופטימיזציה למסד נתונים, והוא משפר ישירות את זמן התגובה של השרת. אם האתר מציג שגיאת חיבור, זו כבר תקלה אחרת, ופירטתי אותה במאמר על שגיאת התחברות למסד נתונים.
שאלות ותשובות על ניקוי מסד הנתונים
האם ניקוי מסד הנתונים מאיץ את האתר?
תלוי מה מנקים. מחיקה של טבלאות ישנות חוסכת מקום וזמן גיבוי, אבל כמעט לא משנה את המהירות. צמצום ההגדרות שנטענות בכל כניסה וטיפול בשאילתות איטיות משפרים את זמן התגובה של השרת, ושם רואים את ההבדל.
כמה פעמים צריך לנקות?
באתר תוכן קטן, פעם בכמה חודשים מספיק, ובעיקר אחרי הסרת תוספים. בחנות פעילה עם הרבה הזמנות ומשימות רקע, כדאי לתזמן ניקוי אוטומטי של נתונים זמניים וגרסאות פעם בשבוע, ולבדוק את ההגדרות הגדולות פעם ברבעון.
האם מחיקת תוסף מוחקת גם את הטבלאות שלו?
לא תמיד. חלק מהתוספים מוחקים את הנתונים שלהם רק אם מסמנים זאת בהגדרות לפני ההסרה, וחלק לא מוחקים בכלל. זו בדיוק הסיבה שבאתר הזה נשארו 116 טבלאות מתוספים שכבר לא קיימים.
מה זה WP_ALLOW_REPAIR?
זו הגדרה בקובץ wp-config.php שמפעילה כלי תיקון מובנה של וורדפרס לטבלאות פגומות. הכלי נגיש גם בלי התחברות לאתר, ולכן מפעילים אותו רק בזמן התיקון ומבטלים אותו מיד אחרי.
הצעד הבא
רוצים לדעת מה יושב במסד הנתונים שלכם ומה נטען בכל כניסה? שלחו לי את הכתובת. אבדוק את הטבלאות, את ההגדרות הגדולות ואת השאילתות האיטיות, ואגיד לכם מה בטוח למחוק ומה כדאי להשאיר.