האטה בתהליך התשלום ב-Magento 2: "הרוצח" של טבלת ה-Quote
לחנות ה-Magento 2 שלך יש "רוצח ביצועים" שקט. הוא חי בתוך מסד הנתונים שלך.
טבלאות ה-quote וה-quote_item גדלות בכל פעם שלקוח מוסיף מוצר לסל. אם הם לא מבצעים רכישה, הרשומה נשארת. לאורך חודשים, הטבלאות הללו מגיעות למיליוני שורות.
ראיתי פעם חנות עם 15 מיליון שורות בטבלת ה-quote. מהירות התשלום צנחה מ-1.2 שניות ל-8 שניות. לסוחר לא היה מושג למה. ה-frontend היה במטמון (cached), כך שהכל נראה תקין עד שהתשלום נכשל.
טבלאות quote גדולות גורמות לבעיות הבאות:
- טעינה איטית של דף הסל עקב פעולות Join כבדות במסד הנתונים.
- קריאות AJAX איטיות בתהליך התשלום עבור משלוח וסיכומים.
- יצירת הזמנות איטית יותר בממשק הניהול (Admin).
- זמני גיבוי ושחזור ארוכים יותר של מסד הנתונים.
- עומס זיכרון גבוה על PHP-FPM.
איך מתקנים את זה:
Measure the damage בדקו את מספר השורות וגודל הטבלאות. חפשו את כמות ה-
stale_inactive. אלו סלים נטושים בני יותר מ-30 יום. הם לא משרתים שום מטרה מלבד להאט את השאילתות שלכם.Archive before you delete אל תמחקו מיליוני שורות בבת אחת. זה ינעל את הטבלאות שלכם ויפיל את מסד הנתונים. ראשית, צרו טבלאות ארכיון והעבירו אליהן
quotesלא פעילים בני יותר מ-90 יום.Use batched deletes מחקו שורות במנות קטנות של 10,000. זה מונע נעילות טבלה ממושכות. תמיד מחקו קודם את טבלאות הבת (child tables) כדי לכבד את קשרי המפתח הזר (foreign key). הסדר צריך להיות:
- quote_item_option
- quote_address_item
- quote_shipping_rate
- quote_payment
- quote_address
- quote_item
- quote
Optimize and Index הריצו
OPTIMIZE TABLEכדי לפנות שטח דיסק. הוסיפו אינדקסים מורכבים (composite indexes) כדי לעזור למסד הנתונים למצואquotesפעילים מהר יותר. לדוגמה, הוסיפו אינדקס על(is_active, updated_at).Automate the cleanup השתמשו בפקודת ה-Magento CLI:
bin/magento sales:cleanQuotes. הגדירו Cron job שיריץ זאת מדי שבוע בזמני תנועה נמוכה.
Pro Tip: סלי אורחים (Guest carts) גורמים לנפח הגדול ביותר. צמצמו את חיי ה-guest quote ל-7 ימים בהגדרות שלכם. זה ישמור על מסד הנתונים שלכם רזה מבלי לפגוע בלקוחות אמיתיים.
לקוח אחד ראה את זמן טעינת התשלום שלו צונח מ-6.5 שניות ל-1.4 שניות באמצעות הצעדים הללו. הוא גם קיבל בחזרה 9GB של שטח במסד הנתונים.
שמרו על טבלאות ה-quote שלכם קטנות כדי לשמור על אחוזי המרה גבוהים.
