מפתחים שואלים אותי לעיתים קרובות את אותה השאלה: "ה-API שלי איטי. מאיפה מתחילים?" התגובה האינסטינקטיבית היא בדרך כלל לשדרג את השרת או להכפיל את ה-RAM. זה עולה כסף ורק לעיתים נדירות פותר את שורש הבעיה. ברוב אפליקציות Laravel, צוואר הבקבוק נמצא בשכבת מסד הנתונים. התחביר האלגנטי של ה-framework מקל על השכחה שכל קריאת Eloquent הופכת בסופו של דבר ל-SQL, ושה-SQL הוא לרוב המקום שבו הכאב מתחיל.
לפני שאתם נוגעים בהגדרות השרת, עבדו על השאילתות שלכם בצורה שיטתית.
התחילו עם האבחון הנכון
אל תבצעו אופטימיזציה בחושך. כתיבה מחדש של שאילתות באופן אקראי היא ניחוש, וניחושים מבזבזים שעות.
עליכם למצוא את הפקודות שצורכות את מירב הזמן הכולל. עקבו אחר האפליקציה שלכם תחת עומס אמיתי. Laravel Telescope מעניק לכם תצוגה נקייה של כל שאילתה שבוצעה במהלך בקשה, בצירוף זמני הביצוע. Laravel Debugbar מציג אותן בדפדפן שלכם במהלך פיתוח מקומי כך שתוכלו לזהות חריגות באופן מיידי. כשאתם צריכים לתפוס בעיות ב-production, הפעילו את ה-MySQL Slow Query Log. הוא מתעד פקודות שעוברות סף מסוים שאתם מגדירים, מה שהופך אותו לאידיאלי למציאת הפתעות שלא מופיעות במאגרי נתונים קטנים. אם אתם מריצים משהו גדול יותר, כלי Application Performance Monitoring יכול לקשר בין נקודות קצה (endpoints) איטיות של HTTP לבין קריאות ספציפיות למסד הנתונים.
בזמן שאתם סוקרים את הנתונים, חפשו שני דברים: זמן ביצוע מוחלט ותדירות קריאות. שאילתה שלוקחת ארבעים מילי-שניות נשמעת בלתי מזיקה, עד שאתם מבינים שהיא רצה אלפיים פעמים בדקה. דוח של שלוש שניות שרץ פעם בשעה עשוי להיות פחות קריטי מחיפ
הטעות הזו מבטלת אינדקסים בשקט. כאשר עוטפים עמודה בתוך פונקציה בתוך פסוקית WHERE, MySQL לא יכול
