אופטימיזציה של מסד הנתונים

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

ולכן, למרות שבפועל לא מדובר פה בפעולות מסובכות אני חוזר, מזהיר ומתרה – אם אתם לא יודעים להתעסק עם מסד נתונים, אם אין לכם מושג מה התוצאות של הפעולות שלכם יכולות לעשות ואם אין לכם גיבוי – פשוט תתעלמו מהפוסט הזה או שתפנו אל מי מאיתנו שמתעסק בזה כמקצוע (בשליפה מהמותן, חוץ מעצמי אני יכול לחשוב על חנית ועל רויטל, אבל תמיד אפשר להתיעץ בקבוצה הגוגלית).

ולעניין – אופטימיזציה לוורדפרס.

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

החל מ 2.5 הוסיפו בוורדפרס את האפשרות ל Revision – גירסאות קודמות של המסמך. השינוי הזה נועד לאפשר לעורך לחזור אחורה ולהשוות את הניסוח הנוכחי אל מול הקודם. זה כמובן גם מאוד עוזר כשיש גיבוי אם בטעות מחקתם פיסקה או שתיים (או את כל העמוד) ואתם לא רוצים להתחיל לכתוב הכל מהתחלה.
אבל מה לגבי פוסטים שכבר פורסמו? וורדפרס שומרת את הגירסאות הקודמות גם עבור פוסטים שהסטטוס שלהם הוא פורסם – פעולה שמגדילה את נפח מסד הנתונים ולכן מאיטה מעט את עבודתו. בבלוגים קטנים עם כמות קטנה של פוסטים חודשיים (מרכין ראשי בבושה) העסק פחות רלוונטי, אבל בלוגים גדולים יותר כגון חורים ברשת / חדר 404 / הגלוב בוודאי סובלים קשה יותר מהבעיה הזו. הפיתרון הוא פשוט – למחוק את כל הגירסאות הקודמות של פוסטים שכבר פורסמו. דרך phpMyAdmin (או כל מערכת ניהול DB שאתם עובדים איתה) מריצים את השאילתה הבאה. חשוב לוודא שמסד הנתונים שנבחר הוא של וורדפרס וכמובן שהתחילית שהגדרתם לטבלאות היא wp (אם לא צריך להתאים את wp_posts).

DELETE FROM `wp_posts` WHERE `post_type` = ‘revision’

אגב, אם אינכם משתמשים בגירסאות קודמות, עדיף לכבות את הפונקציה הזו. הוסיפו בקובץ ה wp_config,php את השורה הבאה:

define('WP_POST_REVISIONS', false);

אופטימיזציה של מסד הנתונים

אחרי שבוחרים מסד נתונים לעבודה ב PhpMyAdmin (בעמודה השמאלית) נפתחת רשימת הטבלאות הקיימות. בתחתית הרשימה ישנו לינק "select all” ולחיצה עליו תבחר את כל הטבלאות. משמאלו, בתפריט הנגלל, נבחר בשיא הזהירות ב optimize table – ומכאן שאר העבודה היא של mysql. מתחת למנוע MySql מוחק את טבלאות האינדקס שהוא שומר עבור כל טבלה ובונה אותן מחדש בצורה אופטימלית.

שמירת שאילתות

הסעיף הזה קרוב לוודאי לא נוגע ברובנו, הוא מיועד למי שיש לו גישה לקבצי ההגדרות של mysql משהו שקרוב לוודאי שבחיים לא יהיה לכם בשרת שיתופי. אבל אם יש לכם איכסון יעודי / שרת ביתיי / כל פיתרון אחר – אפשר להשתמש במנגנון הקאשינג של MySql על מנת לשמור את התוצאות של שאילתות חוזרות ונשנות. כך למשל, במקום להריץ בכל פעם את השאילתה שמבקשת את הפוסטים לעמוד הראשי ניתן לשלוף את כל המידע הזה במכה ממסד הנתונים.

בשביל זה צריך לערוך את קובץ my.conf (באובונטו הוא ב etc/mysql/my.conf/ ) ולהוסיף אליו את השורות הבאות:

query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 32M

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

לדרג את הפוסט
0

Comments

2 תגובות על “אופטימיזציה של מסד הנתונים”

  1. בזמנו הסתכלתי באינדקסים של וורדפרס והם לא היו משהו. היום הם כבר נכונים?

  2. ליאור, אתה יכול לראות את כל האינדקסים בקודקס:
    http://codex.wordpress.org/Database_Description

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *