最佳化查詢效能簡介

本文概述可提升 BigQuery 查詢效能的最佳化技術。一般來說,查詢時需要完成的工作越少,成效就會越好。這類模型執行速度更快,消耗的資源也較少,因此可降低成本和失敗率。

查詢效能

評估 BigQuery 中的查詢效能時,需要考慮多項因素:

如要評估特定查詢,或確認是否發生資源爭用情形,您可以使用 Cloud Monitoring 或 BigQuery 管理資源圖表,監控 BigQuery 工作在一段時間內的資源消耗情形。您也可以使用 Gemini Cloud Assist 分析工作。如果發現查詢速度緩慢或耗用大量資源,可以著重於最佳化該查詢的效能。

部分查詢模式 (尤其是商業智慧工具產生的模式) 可使用 BigQuery BI Engine 加速。BI Engine 是一項快速的記憶體內分析服務,可智慧快取您最常使用的資料,加快 BigQuery 中的許多 SQL 查詢。BI Engine 內建於 BigQuery,因此您通常不需要修改查詢,就能獲得更出色的效能。

與任何系統一樣,最佳化效能有時也需要進行取捨。 舉例來說,對非 SQL 專家的人而言,使用進階 SQL 語法有時可能會增加複雜性,並降低他們對查詢的理解。 如果將時間花在非重要工作負載的微調上,可能會導致資源無法用於建構應用程式的新功能,或是找出更重要的最佳化項目。為盡可能提高投資報酬率,建議您著重於最佳化資料分析管道中最重要的工作負載。

容量和並行最佳化

BigQuery 提供兩種查詢計價模式:隨選計價和依運算能力計價。隨選模式提供共用的容量集區,費用取決於您執行的每個查詢所處理的資料量。

如果您想規劃每月支出預算,或需要的容量超過隨選模式的上限,建議採用容量計價模式。使用以運算資源為基礎的定價模式時,您會分配專屬的查詢處理運算資源,並以運算單元為單位計算。所有處理位元組的費用都包含在依用量計費的價格中。除了固定的運算單元承諾使用,您也可以使用自動調整資源配置運算單元,根據查詢工作負載提供動態容量。

對相同資料重複執行查詢時,效能可能會有所差異,而且使用隨選運算單元的查詢,差異通常會大於使用預留運算單元的查詢。

在 SQL 查詢處理期間,BigQuery 會將執行查詢各階段所需的運算能力,細分為多個運算單元。BigQuery 會自動判斷可同時執行的查詢數量,如下所示:

  • 隨選模式:專案中可用的運算單元數量
  • 以運算資源為準的模型:預留項目中可用的運算單元數量

如果查詢需要的運算單元數量超過可用數量,系統會將查詢加入佇列,直到有足夠的處理資源為止。查詢開始執行後,BigQuery 會根據階段大小和複雜度,以及可用的運算單元數量,計算每個查詢階段使用的運算單元數量。BigQuery 採用公平排程技術,確保每項查詢都有足夠的容量可執行。

取得更多時段不一定能加快查詢速度。 不過,較大的運算單元集區可提升大型或複雜查詢的效能,以及高並行工作負載的效能。修改運算單元預留項目或自動調度資源限制來增加容量時,BigQuery 的排程器可能會為個別查詢分配更多運算單元,盡可能提高平行處理能力並縮短延遲時間。由於同時運作的運算單元變多,查詢耗用的運算單元總時間 (total_slot_ms) 也可能增加。這代表預期的成本和效能權衡:查詢執行速度更快,但會耗用更多運算單元時間。

如要提高查詢效能,可以修改預留運算單元,或提高運算單元自動調度資源的上限。您也可以使用 Gemini Cloud Assist,透過自然語言提示管理預留項目和容量。

查詢計畫和執行圖表

每次執行查詢時,BigQuery 都會產生查詢計畫。瞭解這項計畫,是有效最佳化查詢的關鍵。查詢計畫包含執行統計資料,例如讀取的位元組和耗用的時段時間。查詢計畫也包含不同執行階段的詳細資料,可協助您診斷及改善查詢效能。查詢執行圖提供圖形介面,可查看查詢計畫及診斷查詢效能問題。

您也可以使用 jobs.get API 方法或 INFORMATION_SCHEMA.JOBS 檢視表,擷取查詢計畫和時間軸資訊。BigQuery Visualizer 是一種開放原始碼工具,可透過視覺化方式呈現 BigQuery 工作中執行階段的流程,並使用這項資訊。

BigQuery 執行查詢工作時,會將宣告式 SQL 陳述式轉換為執行圖。這張圖表會細分為一系列查詢階段,而這些階段本身是由更精細的執行步驟組合而成。BigQuery 使用大量分散式平行架構來執行這些查詢。BigQuery 的階段則是模擬許多潛在工作站可能平行執行的工作單元。各階段之間是使用快速的分散式重組基礎架構通訊。

如要估算查詢在運算方面的費用有多高,可查看查詢使用的總運算單元秒數。運算單元秒數越低越好,因為這表示有更多資源可供同一專案中同時執行的其他查詢使用。

查詢執行圖可協助您瞭解 BigQuery 如何執行查詢,以及特定階段是否佔用大量資源。舉例來說,如果 JOIN 階段產生的輸出資料列遠多於輸入資料列,可能表示您可以在查詢中提早篩選。然而,服務的代管性質限制了部分詳細資料是否可以直接操作。如需改善查詢執行和效能的最佳做法和技巧,請參閱「最佳化查詢運算」。

後續步驟