פתרון בעיות בניהול עומסי עבודה ב-BigQuery
במסמך הזה מוסבר איך לפתור בעיות נפוצות בניהול עומסי עבודה ב-BigQuery, כולל הקצאה של הזמנות, שגיאות בהגדרת הזמנות, התחייבויות לקיבולת, תחרות על משבצות וניטור הזמנות.
כדי להציג ולנהל הזמנות, התחייבויות ותרשימים של משאבים אדמיניסטרטיביים, צריך לוודא שיש לכם את תפקידי ניהול הזהויות והרשאות הגישה (IAM) הנדרשים, כמו התפקיד BigQuery Resource Viewer (roles/bigquery.resourceViewer) או BigQuery Resource Admin (roles/bigquery.resourceAdmin) בפרויקט הניהול. מידע נוסף זמין במאמר בקרת גישה באמצעות IAM.
פתרון בעיות בהזמנות
המידע הבא יעזור לכם לפתור בעיות נפוצות שקשורות להזמנות, כמו שגיאות בהוספת משבצות זמן, סיבות לכך שהזמנה לא משמשת לעבודת BigQuery או הזמנות שלא מזוהות.
אי אפשר להוסיף עוד משבצות לגודל ההזמנה
אם נתקלתם בשגיאות כמו Failed to allocate slots for reservation in the
current system state או Failed to update reservation: Failed to allocate slots
for reservation כשניסיתם להוסיף עוד משבצות לזמן ההזמנה, בדרך כלל מדובר בבעיה זמנית. כדי לפתור את הבעיה:
- אפשר לנסות שוב עם מספר קטן יותר של משבצות.
- אם הניסיון עם מספר קטן יותר של משבצות נכשל, צריך להמתין 15 דקות ולנסות שוב לבצע את הפעולה.
אם אחרי כמה ניסיונות חוזרים וחצי שעה עדיין מופיעה אותה שגיאה, פנו ל-Cloud Customer Care.
אין מספיק מכסה כדי להשלים את הבקשה הזו
אם הודעת השגיאה היא There is insufficient quota to complete this
request, הבקשה חורגת ממגבלת המכסה שהוגדרה לפרויקט.
כדי לפתור את השגיאה הזו, מבצעים אחת מהפעולות הבאות:
- מוסיפים מספר קטן יותר של משבצות להזמנה כדי שהבקשה לא תחרוג ממגבלת המכסה.
- שולחים בקשה להגדלת המכסה באזור המתאים. מידע נוסף זמין במאמר בנושא בקשה להגדלת מכסה.
הזמנה שלא נעשה בה שימוש על ידי BigQuery להרצת משימה
יכולים להיות כמה תרחישים שבהם עבודה תופעל באמצעות תמחור לפי דרישה או מאגר משבצות משותף בחינם, במקום באמצעות ההזמנה שיצרתם.
השאילתה וההזמנה הן באזורים שונים
הזמנות הן משאבים אזוריים. שאילתה מופעלת באותו מיקום כמו כל הטבלאות שאליהן מתייחסים בשאילתה.
אם המיקום של הטבלה לא תואם למיקום של ההזמנה, השאילתה לא משתמשת בהזמנה, אלא פועלת לפי תמחור על פי דרישה (או לפי מאגר המשבצות המשותף בחינם, במקרה של משימות מתאימות של טעינת נתונים וייצוא).
שליחת שאילתות לטבלאות ב-BigQuery Omni
כששולחים שאילתה לטבלה ב-BigQuery Omni, צריך לוודא שיוצרים את ההזמנה באותו אזור כמו הטבלה, ולא באזור שממוקם באותו מקום. אם יוצרים את ההזמנה באזור BigQuery שבו נמצאים הנתונים, השאילתה מופעלת לפי תמחור על פי דרישה.
ההזמנה נוצרה, אבל הפרויקט לא הוקצה לה
כדי להשתמש במשבצות בהזמנה, צריך ליצור הקצאה שמקצה את הפרויקט, התיקייה או הארגון להזמנה הספציפית. מוודאים שלפרויקט יש הקצאה מתאימה למקום השמור.
אי-התאמה בסוג העבודה
כשיוצרים הקצאה, חשוב לבחור את סוג העבודה הנכון. אחרת, העבודות לא ישתמשו בהזמנה.
לדוגמה, אם בוחרים באפשרות PIPELINE כסוג העבודה, כל עבודות השאילתה מופעלות באמצעות תמחור לפי דרישה. כדי להריץ את עבודות השאילתות באמצעות ההזמנה, משנים את סוג ההקצאה ל-QUERY.
שאילתות עם כמה הצהרות
אם מריצים שאילתות עם כמה הצהרות, לא משויכת הזמנה לאובייקט של עבודת האב, גם אם עבודות הבן מורצות במסגרת הזמנה.
כדי לוודא שהעבודה השתמשה בפועל בנתונים ממקום שמור, בודקים את המטא-נתונים של העבודה המשנית.
אחזור תוצאות שנשמרו במטמון
כשמשימת שאילתה מאחזרת תוצאות ששמורות במטמון, השדה של ההזמנה ריק כי BigQuery לא מבצע חישוב ומביא את התוצאות ישירות מהטבלה הזמנית.
פעולות לשינוי שורות בסימון נתונים שהשתנו (CDC)
אם יש לכם טבלאות של לכידת נתוני שינוי (CDC), BigQuery מחיל שינויים בשורות בהמתנה במרווח הזמן של max_staleness כעבודות ברקע שמשתמשות בסוג ההקצאה BACKGROUND. אם אין הקצאות של BACKGROUND, המשימות האלה מתומחרות לפי תמחור על פי דרישה. כדי להימנע מעלויות בלתי צפויות על פי דרישה, כדאי ליצור הקצאה של BACKGROUND לפרויקט. אפשר לזהות את המשרות האלה לפי מחרוזת המשנה queueworker_cdc_background_merge_coalesce במזהה המשרה.
סוגי מודלים של BigQuery ML שמשתמשים בשירותים חיצוניים
אם לא נמצאה הקצאת הזמנה עם ML_EXTERNAL סוג העבודה בפרויקט, משימות ליצירת מודלים חיצוניים יפעלו באמצעות תמחור לפי דרישה. ההקצאה של QUERY סוג העבודה חלה על מודלים רגילים של BigQuery ML ועל מודלים של פירוק מטריצות (שנדרשת להם הזמנה במהדורת Enterprise או Enterprise Plus), בעוד שמודלים חיצוניים דורשים הקצאה של ML_EXTERNAL. מידע נוסף זמין במאמר בנושא הקצאת משבצות לעומסי עבודה ב-BigQuery.
זוהו הזמנות לא מזוהות בפרויקט
מערכת BigQuery מחזיקה בהזמנות שמייצגות מאגר משותף של יחידות קיבולת (slot) ללא תשלום, לשימוש בפעולות מסוימות ב-BigQuery.
default-pipeline
כברירת מחדל, טעינה באצווה או ייצוא באצווה של נתונים ב-BigQuery מתבצעים באמצעות מאגר משבצות משותף ללא תשלום. כשבודקים את עבודות הטעינה או החילוץ האלה, בשדה של ההזמנה מופיע default-pipeline.
אין חיוב על שימוש במאגר המשותף של משבצות. אם אתם רוצים ביצועים עקביים וצפויים, כדאי לרכוש PIPELINE הזמנה.
פתרון בעיות במשימות של ניהול הזמנות
יכול להיות שתיתקלו בשגיאות הבאות כשתיצרו או תעדכנו הזמנה.
גודל ההזמנה או מספר המשבצות הבסיסי חייב להיות כפולה של 50
הודעת שגיאה
Max reservation size can only be configured in multiples of 50, except when covered by excess commitments.Baseline slots can only be configured in multiples of 50, except when covered by excess commitments.
הסיבה
המשבצות תמיד מתרחבות אוטומטית לכפולה של 50. מערכת BigQuery מגדילה את מספר הסלוטים על סמך השימוש בפועל, ומעגלת כלפי מעלה למכפלה הקרובה של 50. אם אין התחייבות או אם ההתחייבות לא מכסה את הגידולים, אפשר להגדיל את מספר המשבצות הבסיסיות ואת מספר המשבצות שמוקצות באמצעות שינוי גודל אוטומטי רק במכפלות של 50.
אם הערך של baseline slots או max reservation size - baseline slots לא מתחלק ב-50 (ולא מכוסה על ידי התחייבויות לקיבולת עודפת), אי אפשר להגדיל את ההזמנה לגודל המקסימלי שלה, ולכן מוצגת השגיאה הזו.
רזולוציה
מבצעים אחת מהפעולות הבאות:
- כדי לכסות את הגידולים במשבצות, צריך לרכוש התחייבויות נוספות לקיבולת.
- בוחרים את מספר המשבצות הבסיסי והמקסימלי במרווחים של 50.
פתרון בעיות שקשורות להתחייבויות לקיבולת
בקטע הזה מתוארים שלבים לפתרון בעיות שיכולים לעזור לכם אם נתקלתם בבעיות שקשורות להתחייבויות לקיבולת ב-BigQuery.
יחידות הקיבולת שנרכשו נמצאות בהמתנה
יחידות הקיבולת (Slots) כפופות לכמות הקיבולת הזמינה. אחרי שרוכשים התחייבויות לשימוש ביחידות קיבולת, המערכת של BigQuery מקצה אותן ובעמודה סטטוס מוצג סימן וי. אם המערכת של BigQuery לא מצליחה להקצות את יחידות הקיבולת המבוקשות באופן מיידי, בעמודה סטטוס יישאר הסטטוס 'בהמתנה'. יכול להיות שיהיה צורך להמתין כמה שעות עד שיחידות הקיבולת יהיו זמינות. אם אתם צריכים גישה למשבצות מוקדם יותר, נסו את הפעולות הבאות:
- מוחקים את ההתחייבות שבהמתנה.
- רוכשים התחייבות חדשה למספר קטן יותר של משבצות. בהתאם לקיבולת, יכול להיות שההתחייבות הקטנה יותר תופעל באופן מיידי.
- רוכשים את המשבצות שנותרו כהתחייבות נפרדת. יכול להיות שהמשבצות האלה יופיעו כהמתנה בעמודה סטטוס, אבל בדרך כלל הן יהפכו לפעילות תוך כמה שעות.
- אופציונלי: כששתי ההתחייבויות הופכות לפעילות, אפשר למזג אותן להתחייבות אחת, בתנאי ששתי ההתחייבויות הן באותו אזור ובאותה מהדורה, ושיש להן את אותה תוכנית התחייבות.
אם התחייבות לשימוש במשבצת נכשלת או נמשכת זמן רב מדי, כדאי להשתמש באופן זמני בתמחור על פי דרישה. בעזרת הפתרון הזה, אתם יכולים להריץ שאילתות קריטיות בפרויקט אחר שלא הוקצה למקומות שמורים, להקצות את הפרויקט ל-None או להסיר את הקצאת הפרויקט לגמרי.
פתרון בעיות שקשורות למחסור ביחידות קיבולת
התחרות על משבצות יכולה לקרות כשאין מספיק משבצות להרצת כל העבודות, מה שגורם לבעיות בביצועים. כדי לנתח אם הירידה בביצועים נובעת מעלייה בעומס העבודה או משינויים בהגדרות הסביבה, אפשר להשוות בין שני מרווחי זמן במערכת בין הזמנות ופרויקטים.
כדי לפתור בעיות שקשורות לתחרות על משבצות, אפשר לפעול לפי השלבים הבאים וליישם את השיטות המומלצות.
אם ניסיתם את השיטות המומלצות האלה ועדיין נתקלתם בבעיות בביצוע המשימות, אתם יכולים לפנות לתמיכה.
עליות חדות בבו-זמניות של משרות
כדי לבדוק אם יש עלייה פתאומית בהפעלות של משימות עם קפיצות בשימוש במשבצות זמן בו-זמניות, אפשר להשתמש בתצוגה המפורטת בתרשימים של משאבים אדמיניסטרטיביים. הזינוקים האלה יכולים להצביע על כך שיש יותר מדי משימות שמתחרות על המשבצות שזמינות בהזמנה שלכם.
שיטה מומלצת: כדאי לבצע אופטימיזציה של שאילתות שצורכות הרבה משאבים או להגדיל את קיבולת המשבצות בהזמנה. מידע נוסף על אופטימיזציה של ביצועי שאילתות זמין במאמר בנושא שיפור חישוב השאילתות.
שימוש גבוה ביחידות קיבולת
כדאי להשתמש בתצוגה המפורטת כדי לבדוק אם משך העבודות התארך, במיוחד אם יש עבודות שחורגות מהקיבולת המקסימלית של ההזמנה. שימוש גבוה ועקבי במשבצות יכול להצביע על תחרות מתמשכת על משבצות.
שיטה מומלצת: כדאי לבדוק את השאילתות באמצעות המסנן jobs explorer slot contention כדי לזהות את השאילתות שצורכות הכי הרבה משבצות ולבצע אופטימיזציה שלהן.
משך העסקה ארוך
אם משך הזמן להשלמת העבודות ארוך משמעותית, כדאי לבדוק את התצוגה המפורטת. עלייה חדה בשימוש במשבצות ובמקביל במספר גבוה של משימות יכולה להעיד על תחרות על משבצות.
שיטה מומלצת: כדי לבודד משימות קריטיות, אפשר להשהות באופן זמני משימות פחות חשובות או להקטין את קצב שליחת המשימות הכולל.
הודעות על מחלוקת לגבי יחידות קיבולת
בטבלת התובנות יכולות להופיע הודעות כמו There were NUMBER jobs detected with
slot_contention in the reservation. שמציינות בעיות שקשורות לתחרות על משבצות.
כדאי לבדוק את כלי הבדיקה של המשימות כדי לראות פרטים על המשימות הספציפיות שסומנו בהודעות האלה.
שיטה מומלצת: כדאי לבצע אופטימיזציה של השאילתות שזוהו או לשנות את הקצאת המשבצות בהזמנה.
פתרון בעיות במעקב אחר הזמנות
בקטעים הבאים מוסבר איך לפתור בעיות נפוצות כשעוקבים אחרי הזמנות של משבצות ב-BigQuery ושימוש במשבצות.
מדדי השימוש ביחידת קיבולת (Slot) לא תואמים INFORMATION_SCHEMA
אם יש הבדלים בין מדדי השימוש במשבצות בתרשימי המשאבים לבין הנתונים ב-INFORMATION_SCHEMA, נסו את הפעולות הבאות:
- הפחתת רמת הפירוט. שינוי רמת הפירוט של התרשים למרווחים של שנייה אחת במקום מרווחים של שעה אחת.
- יישור הצבירה. חשוב לוודא שאתם משתמשים בשיטות צבירה שתואמות בין תרשימי המשאבים לבין נתוני
INFORMATION_SCHEMA. לדוגמה, כדי לשקף בצורה טובה יותר את שיא השימוש בתרשימי המשאבים, כדאי לשנות את צבירת המדדים ל-p99 או ל-p90 באופן עקבי.
משבצות מושאלות מופיעות כשהמשבצות הפנויות מושבתות
יכול להיות שבתרשימי המעקב יוצג ערך שונה מאפס עבור borrowed_slots גם אם ignore_idle_slots=true מוגדר להזמנה אחת או יותר. ההגדרה הזו מונעת מהזמנה לשאול משבצות פנויות, אבל היא לא מונעת ממנה להשאיל משבצות לא בשימוש להזמנות אחרות.
משבצות מושאלות מופיעות במקרים הבאים:
השאלה להזמנות אחרות. הזמנה עם
ignore_idle_slots=trueיכולה להשאיל את יחידות הקיבולת הבסיסיות הלא מנוצלות שלה להזמנות אחרות באותו פרויקט ניהול, אזור ומהדורה שמאפשרות השאלה של יחידות קיבולת לא פעילות (ignore_idle_slots=false). אם כל ההזמנות בפרויקט ניהול, באזור ובמהדורה מסוימים כוללותignore_idle_slots=true, יחידות הקיבולת הלא פעילות לא ישותפו ביניהן.לדוגמה, נניח שהזמנה א' כוללת 100 משבצות, 0 שימוש והיא מוגדרת עם
ignore_idle_slots=true. הזמנה ב' נמצאת באותו פרויקט ניהול, באותו אזור ובאותה מהדורה, יש בה 100 משבצות, היא צריכה 150 משבצות לעומס העבודה שלה והיא מוגדרת עםignore_idle_slots=false. הזמנה ב' יכולה לשאול 50 משבצות פנויות מהזמנה א' כדי לענות על הצרכים שלה. במקרה כזה, בתרשימי המעקב יופיעו 50lent_slotsלהזמנה א' ו-50borrowed_slotsלהזמנה ב'.השימוש חורג מהקיבולת. אם השימוש במשבצת של הזמנה חורג באופן זמני מהקיבולת שלה (קו בסיס + משבצות שגודלן שונה אוטומטית), ההבדל הזה מוצג בתרשימי המעקב כ-
borrowed_slots. ההתנהגות הזו יכולה להתרחש גם בהזמנות עםignore_idle_slots=true.
לפעמים השימוש במשבצות עשוי לחרוג מסכום משבצות הבסיס והמשבצות המותאמות. לא תחויבו על שימוש במשבצות מעבר למכסת הבסיס בתוספת משבצות מותאמות.
משבצות מושאלות מופיעות לפני שמימשתם את כל ההזמנה
לוחות הבקרה של המעקב מתבססים על נתונים מדוגמים, ולכן יכול להיות שהם לא ישקפו בצורה מדויקת את התזמון המדויק של השימוש במשבצת זמן בתוך מרווח הדגימה.
כדי לנתח בצורה מדויקת יותר את השימוש ביחידות קיבולת (Slot), אפשר לשלוח שאילתה להצגת עמודות שקשורות ליחידות קיבולת (Slot) בלי פעילות, כמו העמודות borrowed_slots ו-lent_slots בתצוגה INFORMATION_SCHEMA.RESERVATIONS_TIMELINE.
המאמרים הבאים
- מידע נוסף על ניהול עומסי עבודה באמצעות הזמנות
- איך מנהלים הזמנות של עומסי עבודה.
- מידע על רכישה וניהול של התחייבויות לשימוש במשבצות זמן.
- איך עוקבים אחרי הזמנות ומשתמשים בתרשימים של משאבים אדמיניסטרטיביים
- מידע נוסף על פתרון בעיות ב-BigQuery