שימוש בתורים של שאילתות
מערכת BigQuery קובעת באופן אוטומטי את מספר השאילתות שאפשר להריץ בו-זמנית, שנקרא מקביליות דינמית. שאילתות נוספות מוכנסות לתור עד שמשאבי העיבוד יהיו זמינים. במאמר הזה מוסבר איך לשלוט ביעד המקסימלי של בו-זמניות (concurrency), ואיך להגדיר את הזמן הקצוב לתפוגה של התור לשאילתות אינטראקטיביות ולשאילתות Batch.
סקירה כללית
מערכת BigQuery קובעת באופן דינמי את מספר השאילתות שאפשר להריץ בו-זמנית, על סמך משאבי המחשוב הזמינים. מספר השאילתות שאפשר להריץ בו-זמנית מחושב לכל פרויקט לפי דרישה או לכל הזמנה. שאילתות נוספות מוצבות בתור עד שיש מספיק קיבולת זמינה כדי להתחיל את הביצוע. אורך התור מוגבל ל-1,000 שאילתות אינטראקטיביות ו-20,000 שאילתות אצווה לכל פרויקט בכל אזור, בלי קשר לשאלה אם הפרויקט הוא לפי דרישה או שהוא משתמש בהזמנה. בדוגמה הבאה מוצגת ההתנהגות של פרויקט על פי דרישה כשמקבילות השאילתות המחושבת היא 202:

בהזמנות, יש לכם אפשרות להגדיר את יעד המקביליות המקסימלי, גבול עליון למספר השאילתות שיכולות לפעול במקביל בהזמנה, כדי להבטיח שלכל שאילתה יוקצה מספר מינימלי של משבצות. אי אפשר לציין יעד מקסימלי של פעולות בו-זמניות בפרויקט לפי דרישה. הוא תמיד מחושב באופן דינמי.
התנהגות התור
ב-BigQuery מופעל תזמון הוגן כדי לוודא שאף פרויקט לא יכול לצרוך את כל המשבצות בהזמנה.
השאילתות מפרויקטים עם החלק הקטן ביותר של בו-זמניות (concurrency) מוצאות ראשונות מהתור. במהלך ההפעלה, המשבצות מחולקות באופן הוגן בין הפרויקטים לפני שהן מחולקות בין המשימות בפרויקט.
לדוגמה, נניח שיש לכם הזמנה שמוקצית לשני פרויקטים: א' וב'. BigQuery מחשב את הערך 5 עבור מקביליות ההזמנה. בפרויקט א' פועלות ארבע שאילתות בו-זמנית, בפרויקט ב' פועלת שאילתה אחת, ושאר השאילתות ממתינות בתור. שאילתה מפרויקט ב' תוסר מהתור ראשונה גם אם היא נשלחה אחרי השאילתה מפרויקט א'. אחרי שתשאילתה מתחילה לפעול, היא מקבלת חלק הוגן מהמשבצות בהזמנה המשותפת.
בנוסף למספר הכולל של שאילתות מקבילות, BigQuery קובע באופן דינמי את המספר המקסימלי של שאילתות אצווה מקבילות להרצה לכל פרויקט או הזמנה לפי דרישה. אם מספר שאילתות האצווה שפועלות בו-זמנית מגיע למקסימום הזה, אז ניתנת עדיפות לשאילתות אינטראקטיביות גם אם הן נשלחו מאוחר יותר.
כשמוחקים הזמנה, כל השאילתות שמוכנסות לתור מקבלות פסק זמן. כשפרויקט שהוקצה להזמנה מוקצה מחדש להזמנה אחרת, כל הבקשות שנמצאות בתור או שמופעלות ממשיכות לפעול בהזמנה הישנה, ואילו כל הבקשות החדשות מועברות להזמנה החדשה. כשמסירים פרויקט שהוקצה להזמנה, השאילתות שרצות ממשיכות לפעול בהזמנה, ובקשות חדשות ובקשות שנמצאות בתור לביצוע פועלות באמצעות המודל על פי דרישה. אפשר גם לבטל משימות של שאילתות בודדות שפועלות או שנמצאות בתור.
שליטה בזמן הקצוב לתפוגה של התור
כדי לשלוט בערך הזמן הקצוב לתפוגה של תורים לשאילתות אינטראקטיביות או לשאילתות באצווה, משתמשים בהצהרה ALTER PROJECT SET OPTIONS או בהצהרה ALTER ORGANIZATION SET OPTIONS כדי להגדיר את השדות default_interactive_query_queue_timeout_ms או default_batch_query_queue_timeout_ms בהגדרת ברירת המחדל של הפרויקט או הארגון.
כדי לראות את הזמן הקצוב לתפוגה של תורים לשאילתות אינטראקטיביות או לשאילתות באצווה בפרויקט, שולחים שאילתה לתצוגה INFORMATION_SCHEMA.EFFECTIVE_PROJECT_OPTIONS.
כדי להשבית את ההמתנה בתור, מגדירים את הזמן הקצוב לתור לערך -1. אם מגיעים למספר המקסימלי של שאילתות מקבילות, שאילתות נוספות נכשלות עם שגיאה ADMISSION_DENIED.
הגדרת יעד מקסימלי של פעולות בו-זמניות
אתם יכולים להגדיר ידנית את יעד הבו-זמניות המקסימלית כשאתם יוצרים הזמנה. כברירת מחדל, יעד המקביליות המקסימלי הוא אפס, כלומר BigQuery קובע באופן דינמי את המקביליות על סמך המשאבים הזמינים. אחרת, אם מגדירים יעד שאינו אפס, היעד המקסימלי של מספר הבקשות המקבילות מציין גבול עליון למספר השאילתות שמופעלות במקביל בהזמנה, וכך מובטח נפח מינימלי של משבצות שזמין לכל שאילתה שמופעלת.
הגדלת יעד המקבילות המקסימלי לא מבטיחה שיותר שאילתות יפעלו בו-זמנית. המקביליות בפועל תלויה במשאבי המחשוב הזמינים, שאפשר להגדיל אותם על ידי הוספת משבצות נוספות להזמנה.
התפקידים הנדרשים
כדי לקבל את ההרשאה שנדרשת להגדרת הבו-זמניות בהזמנה חדשה, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM BigQuery Resource Editor (roles/bigquery.resourceEditor) בפרויקט הניהול שבו מתבצעת הבעלות על ההתחייבויות.
להסבר על מתן תפקידים, קראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקיד המוגדר מראש הזה כולל את ההרשאה bigquery.reservations.create, שנדרשת כדי להגדיר את מספר המכונות שניתן להפעיל בו-זמנית בהזמנה חדשה.
יכול להיות שתוכלו לקבל את ההרשאה הזו גם בתפקידים בהתאמה אישית או בתפקידים אחרים שמוגדרים מראש.
מידע נוסף על תפקידי IAM ב-BigQuery זמין במאמר תפקידים והרשאות מוגדרים מראש.
הגדרת יעד מקסימלי של שיחות בו-זמניות להזמנה
בוחרים באחת מהאפשרויות הבאות:
המסוף
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בתפריט הניווט, לוחצים על ניהול קיבולת.
לוחצים על יצירת בקשה לשמירת מקום.
בוחרים את הגדרות ההזמנה.
כדי להרחיב את הקטע הגדרות מתקדמות, לוחצים על החץ להרחבה .
כדי להגדיר את מספר המשימות המקסימלי לביצוע בו-זמנית, לוחצים על המתג ביטול ההגדרה האוטומטית של מספר המשימות המקסימלי לביצוע בו-זמנית ומזינים את מספר המשימות המקסימלי לביצוע בו-זמנית.
לוחצים על Save.
SQL
כדי להגדיר את יעד המקסימום של הבו-זמניות להזמנה חדשה, משתמשים בהצהרת DDL CREATE RESERVATION ומגדירים את השדה target_job_concurrency.
במסוף Cloud de Confiance , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
CREATE RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME` OPTIONS ( target_job_concurrency = CONCURRENCY);
מחליפים את מה שכתוב בשדות הבאים:
-
ADMIN_PROJECT_ID: הפרויקט שבבעלותו נמצאת ההזמנה -
LOCATION: המיקום של ההזמנה, למשלregion-us -
RESERVATION_NAME: השם של ההזמנה -
CONCURRENCY: יעד המקסימום של הפעלה בו-זמנית
-
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
כדי להגדיר את יעד המקסימום של הפעלה בו-זמנית להזמנה חדשה, מריצים את הפקודה bq mk:
bq mk \
--project_id=ADMIN_PROJECT_ID \
--location=LOCATION \
--target_job_concurrency=CONCURRENCY \
--reservation \
RESERVATION_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
ADMIN_PROJECT_ID: הפרויקט שבבעלותו נמצאת ההזמנה -
LOCATION: המיקום של ההזמנה -
CONCURRENCY: יעד המקסימום של הפעלה בו-זמנית -
RESERVATION_NAME: השם של ההזמנה
API
כדי להגדיר את יעד המקסימום של בו-זמניות ב-BigQuery Reservation API, צריך להגדיר את השדה concurrency במשאב ההזמנה ולקרוא לשיטה CreateReservationRequest.
עדכון היעד של מספר החיבורים המקסימלי בו-זמנית
אפשר לעדכן את יעד הבו-זמניות המקסימלי להזמנה בכל שלב. עם זאת, הגדלת היעד לא מבטיחה שיותר שאילתות יפעלו בו-זמנית. המקביליות בפועל תלויה במשאבי המחשוב הזמינים. אם מקטינים את יעד הבו-זמניות המקסימלי, זה לא משפיע על שאילתות שמופעלות באופן פעיל, ושאילתות שנמצאות בתור לא יופעלו עד שמספר השאילתות המקבילות ירד מתחת ליעד החדש.
אם מגדירים את יעד המקסימום של הפעולות המקבילות ל-0, BigQuery קובע באופן דינמי את מספר הפעולות המקבילות על סמך המשאבים הזמינים (התנהגות ברירת המחדל).
התפקידים הנדרשים
כדי לקבל את ההרשאה שנדרשת לעדכון של יעד המקסימום של פעולות מקבילות בהזמנה, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM BigQuery Resource Editor (עורך משאבים ב-BigQuery) (roles/bigquery.resourceEditor) בפרויקט הניהול שבו מתבצעת הבעלות על ההתחייבויות.
להסבר על מתן תפקידים, קראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקיד המוגדר מראש הזה מכיל את ההרשאה bigquery.reservations.update, שנדרשת כדי לעדכן את יעד המקסימום של השימוש המקביל בהזמנה.
יכול להיות שתוכלו לקבל את ההרשאה הזו גם בתפקידים בהתאמה אישית או בתפקידים אחרים שמוגדרים מראש.
מידע נוסף על תפקידי IAM ב-BigQuery זמין במאמר תפקידים והרשאות מוגדרים מראש.
עדכון יעד המקסימום של מספר המשתמשים בו-זמנית בהזמנה
בוחרים באחת מהאפשרויות הבאות:
המסוף
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בתפריט הניווט, לוחצים על ניהול קיבולת.
לוחצים על הכרטיסייה Slot reservations.
מאתרים את ההזמנה שרוצים לעדכן.
מרחיבים את האפשרות Actions (פעולות).
לוחצים על Edit.
כדי להרחיב את הקטע הגדרות מתקדמות, לוחצים על החץ להרחבה .
כדי להגדיר את מספר המשימות המקסימלי לביצוע בו-זמנית, לוחצים על המתג ביטול ההגדרה האוטומטית של מספר המשימות המקסימלי לביצוע בו-זמנית ומזינים את מספר המשימות המקסימלי לביצוע בו-זמנית.
לוחצים על Save.
SQL
כדי לעדכן את יעד המקסימום של פעולות מקבילות בהזמנה קיימת, משתמשים בהצהרת DDL ALTER RESERVATION ומגדירים את השדה target_job_concurrency.
במסוף Cloud de Confiance , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
ALTER RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME` SET OPTIONS ( target_job_concurrency = CONCURRENCY);
מחליפים את מה שכתוב בשדות הבאים:
-
ADMIN_PROJECT_ID: הפרויקט שבבעלותו נמצאת ההזמנה -
LOCATION: המיקום של ההזמנה, למשלregion-us -
RESERVATION_NAME: השם של ההזמנה -
CONCURRENCY: יעד המקסימום של הפעלה בו-זמנית
-
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
כדי לעדכן את יעד השימוש המקביל המקסימלי בהזמנה קיימת, מריצים את הפקודה bq update:
bq update \
--project_id=ADMIN_PROJECT_ID \
--location=LOCATION \
--target_job_concurrency=CONCURRENCY \
--reservation \
RESERVATION_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
ADMIN_PROJECT_ID: הפרויקט שבבעלותו נמצאת ההזמנה -
LOCATION: המיקום של ההזמנה -
CONCURRENCY: יעד המקסימום של הפעלה בו-זמנית -
RESERVATION_NAME: השם של ההזמנה
API
כדי לעדכן את יעד המקסימום של הבו-זמניות ב-BigQuery Reservation API, צריך להגדיר את השדה concurrency במשאב ההזמנה ולקרוא לשיטה UpdateReservationRequest.
מעקב
כדי לראות אילו שאילתות פועלות ואילו נמצאות בתור, אפשר לעיין בתצוגות INFORMATION_SCHEMA.JOBS_BY_* ו-INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*. השדה state מוגדר לערך RUNNING עבור שאילתות שפועלות באופן פעיל, ולערך PENDING עבור שאילתות שנמצאות בתור.
כדי לראות כמה שאילתות מקבילות הופעלו כשהסף הדינמי של בו-זמניות (concurrency) הגיע לכל שנייה במהלך היום האחרון, מריצים את השאילתה הבאה:
SELECT t1.period_start, t1.job_count AS dynamic_concurrency_threshold FROM ( SELECT period_start, state, COUNT(DISTINCT job_id) AS job_count FROM `PROJECT_ID.REGION_ID`.INFORMATION_SCHEMA.JOBS_TIMELINE WHERE period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP() AND reservation_id = "RESERVATION_ID" GROUP BY period_start, state) AS t1 JOIN ( SELECT period_start, state, COUNT(DISTINCT job_id) AS job_count FROM `PROJECT_ID.REGION_ID`.INFORMATION_SCHEMA.JOBS_TIMELINE WHERE state = "PENDING" AND period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP() AND reservation_id = "RESERVATION_ID" GROUP BY period_start, state HAVING COUNT(DISTINCT job_id) > 0 ) AS t2 ON t1.period_start = t2.period_start WHERE t1.state = "RUNNING";
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: שם הפרויקט שבו הפעלתם את השאילתות REGION_ID: המיקום שבו העיבוד של השאילתות בוצע-
RESERVATION_ID: השם של ההזמנה שבה השאילתות פועלות
אתם יכולים לעקוב אחרי אורך תור השאילתות בהזמנה באמצעות תרשימים של משאבי ניהול ב-BigQuery ולבחור בתרשים Job Concurrency עם המדד Pending.
אפשר גם לעקוב אחרי אורך התור ב-Cloud Monitoring על ידי הצגת המדד job count וסינון לפי מספר המשימות במצב pending.
מגבלות
- בכל פרויקט לפי דרישה אפשר להוסיף לתור עד 1,000 שאילתות אינטראקטיביות ו-20,000 שאילתות אצווה בכל פעם. אם שאילתות חורגות מהמגבלה הזו, הן מחזירות שגיאת מכסה. אי אפשר לבקש להגדיל את המכסות האלה.
- במסגרת מקום שמור, כל פרויקט שמוקצה למקום השמור הזה יכול להוסיף לתור עד 1,000 שאילתות אינטראקטיביות ו-20,000 שאילתות אצווה בכל פעם. אם שאילתות חורגות מהמגבלה הזו, הן מחזירות שגיאת מכסה. אי אפשר לבקש להגדיל את המכסות האלה.
- כברירת מחדל, שאילתות שלא התחילו את ההרצה שלהן יפסיקו לפעול אחרי 6 שעות לשאילתות אינטראקטיביות ו-24 שעות לשאילתות אצווה.
- אי אפשר להגדיר את יעד המקסימום של הפעלה בו-זמנית של שאילתות בפרויקט לפי דרישה.
- אי אפשר להגדיר את יעד המקסימום של מספר השאילתות המקבילות בשאילתות שמופעלות עם הזמנה במהדורה רגילה. מידע נוסף על מהדורות זמין במאמר מבוא למהדורות של BigQuery.