- סטטוס
- נפתר
- נפתר בגרסה
- 2.3.8
סקירה כללית של התקלה
החל מגרסה 2.3.0 של התוסף WPML Media Translation, ניתן לתרגם ולסנכרן מדיה בין תרגומים.
כחלק מתהליך ההגדרה (שמופעל גם כאשר אתה עובר מגרסה קודמת), WPML Media סורק את כל האתר בחיפוש אחר כתובות URL של מדיה המשמשות בתוכן.
סימון הפוסטים המכילים מדיה מסייע בהמשך, כך שבאירועים מסוימים הקשורים לתרגום מדיה (כגון תרגום פוסט מדיה מסוים), רק פוסטים שכוללים מדיה בפועל ייסרקו כדי לעדכן את התוכן עם מדיה מתורגמת.
עם זאת, באתרים גדולים מאוד, תהליך ההגדרה עלול ליצור עומס מסוים על מסד הנתונים, מה שהופך את התהליך כולו לאטי מהצפוי.
לרוב, העומס נגרם משאילתות הדרושות לזיהוי מזהים (IDs) של קבצים מצורפים על סמך כתובות URL. בדרך כלל, ניתן לקבוע את המזהה (ID) של הקובץ המצורף מהתכונות של תגית HTML (לדוגמה id=”attachment_8” – כאן, 8 הוא המזהה (ID) של הקובץ המצורף). כאשר לא נעשה שימוש בתכונה כזו, WPML Media קובע את המזהה (ID) מכתובת ה־URL עצמה. במקרה זה, נעשה שימוש בשני סוגים של שאילתות:
- שאילתה שמחפשת התאמה מול השדה ‘guid’ בטבלה wp_posts
- שאילתה נוספת שמחפשת התאמה מול השדות meta_value בטבלה wp_postmeta.
עם זאת, אף אחד משדות הטבלה הללו אינו מאונדקס כברירת מחדל. מכיוון שמדובר בהתאמת טקסט (גם אם לא בחיפוש טקסט חלקי), במסדי נתונים גדולים הדבר עלול להיות אטי.
פתרון עוקף
דרך לעקוף בעיה זו היא להוסיף (לפחות באופן זמני) אינדקסים לשדות אלה.
תוכל לעשות זאת באמצעות שתי שאילתות SQL כמו אלה:
ALTER TABLE `wp_posts` ADD INDEX `guid` (`guid`);
ALTER TABLE `wp_postmeta` ADD INDEX `meta_value` (`meta_value`(512));
לתוספות אלה לא אמורות להיות תופעות לוואי על מסד הנתונים שלך, מלבד הגדלה קלה של הגודל הפיזי של מסד הנתונים בדיסק. אם אתה מעדיף להסיר אותן לאחר הפעלת הגדרת WPML Media, תוכל לעשות זאת באמצעות שתי שאילתות ה־MySQL הבאות:
ALTER TABLE `wp_posts` DROP INDEX `guid`;
ALTER TABLE `wp_postmeta` DROP INDEX `meta_value`;
הערה: הקידומת wp_ עבור הטבלאות המוזכרות בשאילתות יכולה להיות שונה בהתאם לתצורת ה־WordPress שלך. בדרך כלל וכברירת מחדל, היא wp_
דוגמה למקרה בוחן: באתר עם כ־140,000 קבצים מצורפים וכ־5,000 פוסטים, ההגדרה יכולה לארוך יותר מ־30 דקות עד להשלמתה. לאחר הוספת האינדקסים, ההגדרה מסתיימת תוך מספר דקות. הבדיקות בוצעו בסביבת פיתוח רגילה. ערכים אלה יכולים להיות אפילו טובים יותר בשרת פעיל אמיתי.