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

如要卸載主要執行個體的讀取流量,同時不犧牲讀取一致性,也不修改應用程式連線端點,您可以在 AlloyDB for PostgreSQL 執行個體中啟用、設定及監控透明查詢轉送功能。透明查詢轉送功能會攔截主要節點上的唯讀查詢,並選擇性地將查詢轉送至未充分利用的讀取集區執行個體,傳回與主要節點執行結果一致的結果。

透明查詢轉送

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

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

事前準備

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

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

必要的角色

啟用透明查詢轉送

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

在工作階段層級啟用

如要為目前的工作階段啟用透明查詢轉送功能,請執行下列 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 陳述式支援有限。
  • 查詢不得參照暫存、未記錄或目錄資料表。
  • 查詢必須遵守下列函式限制:
    • 查詢不得包含 volatile 函式或任何 user-defined function (UDF)。
    • 查詢不得包含 SQL 值函式,例如 CURRENT_DATE、LOCALTIME、USER 或 CURRENT_SCHEMA。
    • 查詢不得包含 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:無法轉寄。

後續步驟