排解 BigQuery 工作負載管理問題
本文說明如何排解 BigQuery 工作負載管理服務的常見問題,包括預留項目分配和指派作業、預留項目設定錯誤、容量承諾、運算單元爭用和預留項目監控。
如要查看及管理預留量、承諾和管理資源圖表,請確認您在管理專案中具備必要的 Identity and Access Management (IAM) 角色,例如 BigQuery 資源檢視者 (roles/bigquery.resourceViewer) 或 BigQuery 資源管理員 (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 分鐘,然後重試作業。
如果重試多次並等待 30 分鐘後,仍收到相同錯誤,請與 Cloud Customer Care 團隊聯絡。
配額不足,無法完成這項要求
如果錯誤訊息指出 There is insufficient quota to complete this
request,表示要求超出專案配額上限。
如要解決這項錯誤,請執行下列任一操作:
- 在預留項目中新增較少的運算單元,確保要求不會超過配額限制。
- 在相應區域申請提高配額。詳情請參閱「要求提高配額」。
BigQuery 未使用預留項目執行工作
在多種情況下,作業可能會使用隨選價格或免費共用運算單元集區執行,而不是使用您建立的預留項目。
查詢和預訂位於不同區域
預訂是區域資源。查詢會與查詢中參照的任何資料表位於相同位置。
如果資料表位置與預留項目位置不符,查詢不會使用預留項目,而是以隨選價格執行 (或使用免費共用運算單元集區,適用於符合資格的批次載入和匯出作業)。
查詢 BigQuery Omni 資料表
查詢 BigQuery Omni 資料表時,請務必在與資料表相同的區域中建立預留項目,而非在共置區域中建立。如果您在同區的 BigQuery 區域建立預留項目,查詢會以隨選價格執行。
已建立預留項目,但專案未指派給該項目
如要使用預留項目中的配額,您必須建立指派作業,將專案、資料夾或機構指派給特定預留項目。請確認專案已指派對應的預留項目。
工作類型不符
建立指派事項時,請務必選取正確的工作類型,否則工作不會使用預訂。
舉例來說,如果選取 PIPELINE 做為工作類型,所有查詢工作都會採用隨選定價。將指派類型變更為 QUERY,即可使用預留項目執行查詢作業。
多陳述式查詢
如果您執行多重陳述式查詢,即使子項工作是在預訂項目下執行,父項工作物件也不會與預訂項目建立關聯。
如要確認工作是否實際使用預留項目,請檢查子工作的中繼資料。
正在擷取快取結果
查詢工作擷取快取結果時,預留項目欄位會空白,因為 BigQuery 不會執行任何運算,而是直接從臨時資料表擷取結果。
變更資料擷取資料列修改作業
如果您有變更資料擷取 (CDC) 資料表,BigQuery 會在 max_staleness 間隔內,以使用 BACKGROUND 指派類型的背景工作套用待處理的資料列修改。如果沒有 BACKGROUND 指派作業,這些工作會採用隨選價格。請考慮為專案建立 BACKGROUND 指派項目,以免產生非預期的隨需費用。您可以在工作 ID 中找出 queueworker_cdc_background_merge_coalesce 子字串,藉此識別這些工作。
使用外部服務的 BigQuery ML 模型類型
如果專案中找不到 ML_EXTERNAL 工作類型指派的預留項目,外部模型建立工作就會以即付即用價格執行。QUERY 工作類型指派適用於標準 BigQuery ML 模型和矩陣因式分解模型 (需要 Enterprise 或 Enterprise Plus 版預留),而外部模型則需要 ML_EXTERNAL 指派。詳情請參閱「將運算單元指派給 BigQuery 工作負載」。
專案中無法辨識的預留項目
BigQuery 擁有保留項目,代表 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 容量承諾相關問題。
購買的運算單元尚待處理
運算單元是依據可用容量而定。如果您購買了運算單元承諾並透過 BigQuery 進行分配,「狀態」欄會顯示勾號。如果 BigQuery 無法立即分配要求的運算單元,則「狀態」欄會持續顯示待處理狀態。您可能必須等待數小時,直到有可用的運算單元釋出。如需提早取得空位,請嘗試下列做法:
- 刪除待處理的承諾使用合約。
- 購買運算單元數量較少的新承諾使用合約。視容量而定,較小的承諾使用合約可能會立即生效。
- 以獨立的約期購買剩餘運算單元。這些運算單元可能會在「狀態」欄中顯示為待處理,但通常會在幾小時內啟用。
- 選用:如果兩項承諾使用合約都已啟用,且兩者位於相同區域、版本,並採用相同承諾方案,則可合併為一項承諾使用合約。
如果時段承諾失敗或需要很長時間才能完成,請考慮暫時使用隨選價格。使用這項解決方案,您可以在未指派給任何預留項目的其他專案中執行重要查詢、將專案指派給 None,或完全移除專案指派。
排解運算單元爭用情況
如果運算單元不足以執行所有工作,就可能發生運算單元爭用情況,進而導致效能問題。如要分析效能下降是否源自工作負載增加或環境設定變更,您可以比較預訂和專案的兩個系統間隔。
如要排解時段爭用問題,請按照下列步驟操作,並採用最佳做法。
如果試過這些最佳做法,但工作效能問題仍未解決,請申請支援。
工作並行數暴增
在管理資源圖表中,使用詳細檢視畫面,檢查工作執行次數是否突然暴增,以及是否同時出現尖峰時段用量暴增的情況。這些尖峰可能表示有太多工作爭用預訂中的可用時段。
最佳做法:考慮最佳化耗用大量資源的查詢,或增加預訂的時段容量。如要進一步瞭解如何盡可能提高查詢效能,請參閱「最佳化查詢運算」。
高運算單元用量
使用詳細檢視畫面檢查工作時間是否變長,尤其是工作超出預留項目最大容量時。運算單元用量持續偏高,可能表示運算單元持續發生爭用情形。
最佳做法:使用作業探索器的時段爭用篩選器檢查查詢,找出消耗最多時段的查詢並加以最佳化。
工作時間長度
如果工作完成時間明顯變長,請查看詳細檢視畫面。工作並行數和運算單元用量大幅增加,可能表示運算單元發生爭用。
最佳做法:暫停較不重要的工作或降低整體工作提交率,即可隔離重要工作。
運算單元爭用情況訊息
洞察資料表可能會顯示 There were NUMBER jobs detected with
slot_contention in the reservation. 等訊息,指出有時段爭用問題。請查看工作探索器,瞭解這些訊息中標記的特定工作詳細資料。
最佳做法:最佳化已識別的查詢,或調整預訂的時段分配。
排解預訂監控問題
以下章節說明如何解決監控 BigQuery 預留位置和配額用量時的常見問題。
廣告空間用量指標不相符 INFORMATION_SCHEMA
如果資源圖表中的時段使用指標與 INFORMATION_SCHEMA 資料不一致,請嘗試下列做法:
- 降低精細程度。將圖表精細程度變更為 1 秒間隔,而非 1 小時間隔。
- 調整匯總。請務必使用與資源圖表和
INFORMATION_SCHEMA資料一致的匯總方法。舉例來說,如要更準確地反映資源圖表中的尖峰用量,請將指標彙整方式一律改為 p99 或 p90。
停用閒置時段後,系統會顯示借用的時段
即使已為一或多筆預訂設定 ignore_idle_slots=true,監控圖表仍可能顯示 borrowed_slots 的非零值。這項設定可防止預留項目借用閒置運算單元,但不會阻止預留項目將未使用的運算單元借給其他預留項目。
在下列情況下,系統會顯示借用的時段:
借給其他預訂項目。如果預留項目具有
ignore_idle_slots=true,即可將未使用的基準運算單元借給相同管理員專案、區域和版本中允許借用閒置運算單元 (ignore_idle_slots=false) 的其他預留項目。如果管理員專案、區域和版本中的所有預留項目都具有ignore_idle_slots=true,則閒置運算單元不會在這些預留項目之間共用。舉例來說,假設預留項目 A 有 100 個運算單元,用量為 0,且已設定
ignore_idle_slots=true。保留項目 B 位於相同管理專案、區域和版本,有 100 個時段,工作負載需要 150 個時段,且已設定ignore_idle_slots=false。預留項目 B 可以向預留項目 A 借用 50 個閒置運算單元,以滿足自身需求。發生這種情況時,監控圖表會回報預留項目 A 為 50lent_slots,預留項目 B 為 50borrowed_slots。用量超出容量。如果預留項目的運算單元用量暫時超過容量 (基準值 + 自動調度運算單元),監控圖表會將這項差異顯示為
borrowed_slots。即使是使用ignore_idle_slots=true預訂的行程,也可能發生這種情況。
運算單元用量有時可能會超過基準運算單元加上調度運算單元的總和。 如果運算單元用量超過基準運算單元加上擴充運算單元,系統不會向您收費。
預留項目用盡前,會顯示借用的運算單元
監控資訊主頁會使用樣本資料,因此可能無法準確反映取樣間隔內運算單元使用情況的確切時間。
如要更準確地分析運算單元用量,請查詢與閒置運算單元相關的資料欄,例如 INFORMATION_SCHEMA.RESERVATIONS_TIMELINE 檢視中的 borrowed_slots 和 lent_slots 資料欄。
後續步驟
- 進一步瞭解如何使用預留項目管理工作負載。
- 瞭解如何管理工作負載預留項目。
- 瞭解如何購買及管理配額承諾。
- 瞭解如何監控預留項目,以及使用管理資源圖表。
- 探索其他 BigQuery 疑難排解資源。