מבוא לאופטימיזציה של ביצועי שאילתות

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

ביצועי השאילתה

כדי להעריך את ביצועי השאילתות ב-BigQuery, צריך להתייחס לכמה גורמים:

כדי להעריך שאילתות ספציפיות או לבדוק אם יש תחרות על משאבים, אפשר להשתמש ב-Cloud Monitoring או בתרשימים של משאבי ניהול ב-BigQuery כדי לעקוב אחרי צריכת המשאבים של משימות BigQuery לאורך זמן. אפשר גם להשתמש ב-Gemini Cloud Assist כדי לנתח את העבודות. אם מזהים שאילתה איטית או שאילתה שצורכת הרבה משאבים, אפשר להתמקד באופטימיזציה של הביצועים של השאילתה הזו.

אפשר להאיץ חלק מדפוסי השאילתות, במיוחד אלה שנוצרו על ידי כלי בינה עסקית, באמצעות BigQuery BI Engine. ‫BI Engine הוא שירות ניתוח מהיר בזיכרון שמאפשר להריץ שאילתות SQL רבות ב-BigQuery במהירות גבוהה יותר, באמצעות שמירת הנתונים שבהם אתם משתמשים הכי הרבה במטמון בצורה חכמה. ‫BI Engine מובנה ב-BigQuery, כך שלרוב אפשר לשפר את הביצועים בלי לשנות את השאילתות.

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

אופטימיזציה של הקיבולת והמקבילות

ב-BigQuery יש שני מודלים לתמחור שאילתות: תמחור לפי דרישה ותמחור לפי קיבולת. מודל התמחור על פי דרישה מספק מאגר משותף של קיבולת, והתמחור מבוסס על כמות הנתונים שעוברת עיבוד בכל שאילתה שמריצים.

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

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

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

  • מודל על פי דרישה: מספר המשבצות שזמינות בפרויקט
  • מודל מבוסס-קיבולת: מספר המשבצות שזמינות בהזמנה

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

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

תוכנית שאילתות וגרף ביצוע

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

אפשר גם להשתמש בשיטת jobs.get API או בתצוגה INFORMATION_SCHEMA.JOBS כדי לאחזר את תוכנית השאילתה ואת פרטי ציר הזמן. המידע הזה משמש את BigQuery Visualizer, כלי בקוד פתוח שמציג באופן חזותי את זרימת שלבי הביצוע בעבודת BigQuery.

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

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

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

המאמרים הבאים