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

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

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

הערכת הביצועים של שאילתות ב-BigQuery כוללת כמה גורמים:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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