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

透明查詢轉送最適合下列情境:
- 混合式工作負載 (HTAP):您在處理交易的同一個資料庫上,執行報表或分析查詢,並具備讀取寫入一致性,且希望避免高成本的讀取作業影響寫入延遲時間。
- 單體式應用程式:您想使用讀取集區容量,但不想重構應用程式來使用不同的讀取器和寫入器端點,同時仍需要嚴格的「讀取自己的寫入內容」一致性。
- 動態負載管理:讀取流量會出現無法預測的高峰,且您希望資料庫在主要節點負載過重時,自動將工作卸載至讀取集區節點,並維持讀取己寫一致性。
事前準備
確認 AlloyDB 叢集與 PostgreSQL 17 或 18 相容。
AlloyDB 叢集必須至少設定一個有效的讀取集區執行個體。如要瞭解如何建立或驗證讀取集區執行個體,請參閱「在叢集中建立讀取集區執行個體」和「查看執行個體詳細資料」。
必要的角色
- 請務必使用內建資料庫使用者 (例如
postgres) 進行連線。不支援以 IAM 為基礎的驗證。
啟用透明查詢轉送
透明查詢轉送功能預設為停用。您可以在工作階段或資料庫層級動態啟用這項功能,不必重新啟動資料庫。
在工作階段層級啟用
如要為目前的工作階段啟用透明查詢轉送功能,請執行下列 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:啟用透明查詢轉送功能時的查詢處理。這個標籤會記錄下列其中一個值:
|