本頁面說明 Spanner 查詢最佳化工具及其優點。查詢最佳化工具適用於 GoogleSQL 方言資料庫和 PostgreSQL 方言資料庫。
總覽
Spanner SQL 查詢最佳化工具會將描述查詢所需資料的宣告式 SQL 陳述式,轉換為描述精確取得該資料的命令式執行計畫。將陳述式轉換為查詢執行計畫的程序,會涉及對用來表示查詢的樹狀結構執行轉換。在產生執行計畫的過程中,最佳化工具會保留原始 SQL 查詢的邏輯意義,以便傳回正確的資料列。
最佳化工具的另一個重要角色,是產生高效率的執行計畫。
Spanner 最佳化工具如何產生高效的執行計畫?
Spanner 的最佳化工具會結合成熟的啟發式和以成本為準的最佳化,產生高效率的計畫。部分啟發式非常簡單,例如「在遠端機器上執行篩選器,而非將資料拉至本機」。其他經驗法則較為複雜,但仍包含移動邏輯的原則,可減少資料量,讓資料更接近資料。在跨多台機器分割資料的系統中,這項原則尤其重要。
並非所有執行決策都能透過這類固定規則有效做出,因此 Spanner 的最佳化器也會根據替代方案的預估成本做出決策。系統會根據查詢結構、資料庫結構定義,以及查詢片段產生的資料量來計算這類成本估算值。舉例來說,如果篩選器 SongGenre = "Country"
出現在查詢中,Spanner 會預估 Songs 資料表中有多少資料列符合該篩選器。為了協助計算這類預估值,Spanner 會定期收集統計資料,以便瞭解資料庫中資料的分布情形。
此外,Spanner 會自動判斷是否應針對查詢使用以列為導向或以列為導向的處理方法,藉此最佳化查詢執行作業。詳情請參閱「最佳化掃描作業」。
如要進一步瞭解查詢執行計畫,以及 Spanner 如何運用這些計畫,在分散式環境中執行查詢,請參閱「查詢執行計畫」。
查詢最佳化工具版本
隨著時間的推移,Spanner 查詢最佳化工具會不斷演進,擴大查詢執行計畫中的選項組合,並改善這些選項的預估值準確度,進而提供更有效率的查詢執行計畫。
Spanner 會將最佳化工具更新內容釋出為新的查詢最佳化工具版本,以提高查詢執行計畫的效率。如要進一步瞭解不同版本,請參閱 Spanner 查詢最佳化工具版本。
查詢最佳化工具統計資料套件
Spanner 會保留資料表資料欄資料分布的統計資料,協助估算查詢會產生多少資料列。查詢最佳化工具會根據這些預估值,選擇最佳的查詢執行計畫。Spanner 會定期更新這些統計資料。由於統計資料用於選擇查詢執行計畫,因此當統計資料更新時,Spanner 可能會變更用於查詢的查詢計畫。
根據預設,資料庫會自動使用最新產生的統計資料套件。您可以將資料庫固定在舊版統計資料套件。您也可以選擇使用最新統計資料以外的統計資料包來執行個別查詢。
建構新的統計資料套件
Spanner 會每三天自動產生新的統計資料套件。如要手動建構新的統計資料套件,請使用 GoogleSQL ANALYZE
DDL 陳述式或 PostgreSQL ANALYZE
DDL 陳述式。
資料庫的資料或結構定義發生重大變更後,建立新的統計資料套件有助於提升查詢效能。最佳做法是,如果發生下列情況,請建構新的統計資料套件:
- 資料庫會處理大量插入、更新或刪除作業。
- 您將新索引新增至資料庫。
- 在資料表中新增資料欄。
執行 ANALYZE
DDL 陳述式會更新結構定義、啟動長時間執行的作業,並取消建立任何自動觸發的統計資料。
Spanner 執行完語句後,查詢最佳化工具最多需要十分鐘的時間,才能在查詢規劃中考量新的統計資料套件。
統計資料套件的垃圾收集
Spanner 中的統計資料套件會在建立後保留 30 天,之後就會進行垃圾收集。
Spanner 內建的 INFORMATION_SCHEMA.SPANNER_STATISTICS
資料表包含可用統計資料套件的清單。這個表格中的每一列都會依名稱列出統計資料套件,而名稱包含指定套件的建立時間戳記。每個項目也包含一個名為 ALLOW_GC
的欄位,用於定義套件是否可進行垃圾收集。
您可以將整個資料庫綁定至該表格中列出的任何套件。只要資料庫已綁定至此統計資料套件,系統就不會收集綁定的統計資料套件,並且會忽略 ALLOW_GC
的值。如要針對個別查詢使用特定統計資料套件,該套件必須使用 ALLOW_GC=FALSE
列出或固定。這可避免統計資料套件經過垃圾收集後,查詢失敗。您可以使用 GoogleSQL ALTER STATISTICS
或 PostgreSQL ALTER STATISTICS
DDL 陳述式變更 ALLOW_GC
的值。
套件保留期間和個人識別資訊 (PII)
統計資料套件會根據標準業界做法,包含資料欄的直方圖。這有助於查詢最佳化工具選取最佳查詢計畫。直方圖是使用少量值的樣本建立。這個小型資料集可能含有 PII。
Spanner 會定期建立新的統計資料套件,並預設保留 30 天。因此,從資料庫中刪除的少量值樣本,可能會在統計資料直方圖中保留 30 天。使用 optimizer_statistics_package
資料庫選項固定的統計資料套件,或使用 ALLOW_GC=FALSE
選項的套件,不會進行垃圾收集。這些套件中的直方圖可能包含從資料庫中刪除的值,時間範圍較長。此外,統計資料套件的內容也會包含在資料庫備份中。
最佳化工具統計資料的儲存方式與使用者資料相同,都會進行加密。
這些套件所需的總儲存空間通常小於 100 MB,且會計入您的總儲存空間費用。
後續步驟
- 如要進一步瞭解查詢最佳化工具的版本歷史,請參閱「查詢最佳化工具版本歷史」。
- 如要管理情境的最佳化工具版本和統計資料套件,請參閱「管理查詢最佳化工具」。