透過透明查詢轉送功能,最佳化資源並隔離讀取查詢

本頁面說明如何在 AlloyDB for PostgreSQL 執行個體中啟用、設定及監控透明查詢轉送功能。透明查詢轉送是一項智慧資源最佳化功能,可讓主要節點攔截唯讀查詢,並選擇性地將查詢轉送至未充分利用的讀取集區執行個體,同時維持「讀取您寫入的內容」一致性。轉送至讀取集區的查詢會產生與主要節點執行作業一致的結果。

透明查詢轉送

透明查詢轉送最適合下列情境:

  • 混合式工作負載 (HTAP):您在處理交易的同一資料庫中執行報表或分析查詢,並希望讀取您寫入的資料,同時避免昂貴的讀取作業影響寫入延遲。
  • 單體式應用程式:您想使用讀取集區容量,但不想重構應用程式來使用個別的讀取器和寫入器端點,同時仍需要嚴格的讀寫一致性。
  • 動態負載管理:讀取流量會出現無法預測的尖峰,且您希望在主要節點負載過重時,資料庫能自動將工作卸載至讀取集區節點,並維持讀後即寫一致性。

事前準備

  • 確認 AlloyDB 叢集與 PostgreSQL 17 或 18 相容。

  • 您必須在 AlloyDB 叢集中設定至少一個有效的讀取集區執行個體。如要瞭解如何建立或驗證讀取集區執行個體,請參閱「在叢集中建立讀取集區執行個體」和「查看執行個體詳細資料」。

必要的角色

  • 確認您具備 alloydbsuperuser 資料庫角色,或以預設 postgres 使用者身分登入。

啟用透明查詢轉送

透明查詢轉送功能預設為停用。您可以在工作階段層級或資料庫層級動態啟用這項功能,不必重新啟動資料庫。

在工作階段層級啟用

如要為目前的工作階段啟用查詢轉送功能,請執行下列 SQL 指令:

SET alloydb.enable_query_forwarding = TRUE;

在資料庫層級啟用

如要為特定資料庫啟用透明查詢轉送功能,請執行下列 SQL 指令:

ALTER DATABASE DATABASE_NAME SET alloydb.enable_query_forwarding = ON;

DATABASE_NAME 替換成您的資料庫名稱。

查詢資格條件

  • 透明查詢轉送僅適用於唯讀 SELECT 陳述式。
  • 查詢不得採用任何資料列層級的鎖定,例如 SELECT ... FOR UPDATE 中使用的鎖定。
  • 透明查詢轉送功能對多陳述式交易中的 SELECT 陳述式支援有限。
  • 查詢不得參照臨時、未記錄或目錄資料表。
  • 查詢必須遵守下列函式限制:
    • 查詢不得包含不穩定函式或任何使用者定義函式 (UDF)。
    • 查詢不得包含 CURRENT_DATELOCALTIMEUSERCURRENT_SCHEMA 等 SQL 值函式。
    • 查詢不得包含 NEXTVAL() 運算式。
    • 查詢不得包含任何 SQL 程序或 SQL 函式。
  • 所有結果資料欄都必須使用實作二進位傳送和接收函式的資料類型。
  • 只有在查詢的額外費用相較於查詢總費用極低時,才符合轉送資格。也就是說,使用索引掃描的查詢通常會遭到排除,因為這類查詢的額外負擔通常會超過查詢本身的費用。
  • 系統不支援轉送至 AlloyDB 熱待命節點。AlloyDB 熱待命節點是高可用性 (HA) 主要執行個體的專屬次要節點。

使用 EXPLAIN 驗證查詢資格

在下列範例中,large_table 是資料庫中含有許多資料列的資料表。如要檢查特定查詢是否符合目前設定的轉送資格,請執行 EXPLAIN 指令:

EXPLAIN SELECT count(*) FROM large_table t1, large_table t2;

如果查詢符合資格,輸出內容會在標準 Postgres 執行計畫後,包含查詢轉送狀態陳述式。如果缺少這項陳述式,查詢就不符合查詢轉送資格,且會在主要伺服器上在本機執行。

Aggregate  (cost=25000.00..25000.01 rows=1 width=8)
  ->  Nested Loop  (cost=0.00..20000.00 rows=1000000 width=0)
        ... [Standard Postgres Plan Steps] ...
Query Forwarding: Eligible. (overhead=1250.02)

在輸出回覆中,Eligible 表示查詢符合標準唯讀 SQL 條件,且成本效益分析結果顯示,將查詢路徑導向唯讀集區執行個體較為有利。overhead 參數表示將查詢轉送至讀取集區執行個體的規劃工具計算成本,包括建立連線和還原備用資源快照的額外負擔。

監控查詢轉送指標

如要確認透明查詢轉送功能是否在工作負載中運作,您可以在 Cloud Monitoring 中追蹤下列指標:

指標 說明 詳細資料
alloydb.googleapis.com/internal/database/postgresql/workload/distributed/tqf_query_count 透明查詢轉送處理的查詢累計次數。 顯示名稱:TQF 查詢計數
指標種類:CUMULATIVE
值類型:INT64
標籤:
status:如果啟用透明查詢轉送功能,系統會處理查詢。這個標籤會記錄下列其中一個值:
  • completed:在讀取集區執行個體上執行。
  • fallback:在主要項目上執行。
  • disqualified:無法轉寄。

後續步驟