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

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

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

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

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

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

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

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

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

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

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

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

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

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

גישה ליותר משבצות לא תמיד מובילה לביצועים מהירים יותר של שאילתה. עם זאת, מאגר גדול יותר של משבצות יכול לשפר את הביצועים של שאילתות גדולות או מורכבות, וגם את הביצועים של עומסי עבודה עם רמה גבוהה של בו-זמניות. כשמגדילים את הקיבולת על ידי שינוי של הזמנות ה-slots או של מגבלות ההתאמה האוטומטית לעומס, יכול להיות שהמתזמן של BigQuery יקצה יותר slots לשאילתות ספציפיות כדי למקסם את ההקבלה ולהפחית את זמן האחזור. בגלל שיותר חריצים מבצעים עבודה בו-זמנית, יכול להיות שגם זמן החריצים הכולל (total_slot_ms) שהשאילתות צורכות יגדל. זה מייצג את הפשרה הצפויה בין עלות לביצועים: השאילתות פועלות מהר יותר, אבל צורכות יותר זמן חריץ.

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

תוכנית לביצוע שאילתה ותרשים הרצה

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

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

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

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

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

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