本頁面說明如何在 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_DATE、LOCALTIME、USER或CURRENT_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:如果啟用透明查詢轉送功能,系統會處理查詢。這個標籤會記錄下列其中一個值:
|