全部產品
Search
文件中心

PolarDB:使用跨機並行查詢進行分析型查詢

更新時間:Apr 21, 2026

支援使用跨機並行查詢功能進行分析型查詢,實現一定的HTAP能力。本文介紹如何使用跨機並行查詢,提升分析型查詢的效能。

原理介紹

當一條查詢請求在查詢協調節點上被執行跨機並行查詢時,該查詢產生的執行計畫會被分區路由至各個執行節點,每個執行節點將會執行各自的分區計劃,並將分區的查詢結果匯總至查詢協調節點。可以稱查詢協調節點為QC(Query Coordinator)節點,稱分區計劃的執行節點為PX(Parallel Execution)節點。

跨機並行查詢原理

如上圖所示,RO1為QC節點,它接收了一條查詢輸入請求,並將查詢計劃分區路由至RO2、RO3、RO4三個PX節點。每個PX節點將會針對各自接收到的分區計劃,最終從PolarFS共用儲存上讀取到各自所需的資料區塊,由執行節點執行完成相應的分區計劃,並將執行結果返回為QC節點,QC節點匯總後返回查詢結果。

注意事項

由於跨機並行查詢功能需使用多個唯讀節點資源,因此只適用於低頻次的分析型查詢。

參數說明

預設情況下,不開啟跨機並行查詢功能。若您需要使用此功能,請使用如下參數:

參數 說明
polar_cluster_map 用於查詢當前所有隻讀節點的名稱。該參數不可配置。當您新增一個唯讀節點時,該參數會進行更新。
說明 只有核心小版本(V1.1.20)(發布時間:2022年1月)之前建立的叢集才包含該參數。
polar_px_nodes 指定參與跨機並行查詢的唯讀節點。預設為空白,表示所有隻讀節點都參與。可配置為指定節點參與跨機並行查詢,以逗號分隔。例如:
SHOW polar_px_nodes ;
 polar_px_nodes
----------------

(1 row)
SET polar_px_nodes='node1,node2';
SHOW polar_px_nodes ;
 polar_px_nodes
----------------
 node1,node2
(1 row)
polar_px_enable_replay_wait 的主節點與唯讀節點存在一定程度的延遲,當主節點執行DDL語句(例如CREATE TABLE),唯讀節點需要耗時回放該DDL日誌後才可見新建立的表。當設定polar_px_enable_replay_wait為on後,跨機並行查詢啟用強一致性,當前發起的跨機並行查詢請求路由到唯讀節點上執行時,需要唯讀節點回放到該查詢請求前最近的一條日誌後,才會執行查詢請求。

該參數預設為off,即關閉強一致性,在資料庫主備日誌延遲較高時,不保證唯讀節點可以讀到最近的DDL記錄。您可配置polar_px_enable_replay_wait為on,表示啟用強一致性,但是跨機並行查詢會損失一定程度的效能。

該參數可以指定資料庫角色進行開啟。

polar_px_max_workers_number 設定單個節點上的最大跨機並行查詢workers進程數,預設為30。該參數限制了單個節點上的最大並發度,節點上所有會話的跨機並行查詢workers進程數不能超過該參數大小。
polar_enable_px 指定是否開啟跨機並行查詢功能。預設為off,即不開啟。
polar_px_dop_per_node 設定當前會話並行查詢的並行度,預設為1,推薦值為當前CPU總核心數。若設定該參數為N,則一個會話在每個節點上將會啟用N個px workers進程,用於處理當前的跨機並行查詢邏輯。
px_workers 指定跨機並行查詢是否對特定表生效。預設不生效。跨機並行查詢功能比較消耗計算節點叢集資源,因此只有對設定了px_workers的表才使用該功能。例如:
--表示t1表允許跨機並行查詢
ALTER TABLE t1 SET(px_workers=1);

--表示t1表禁止跨機並行查詢
ALTER TABLE t1 SET(px_workers=-1);

--表示t1表忽略跨機並行查詢, 預設狀態
ALTER TABLE t1 SET(px_workers=0);
synchronous_commit WAL相關配置參數,指定當資料庫提交事務時是否需要等待WAL日誌寫入硬碟後才向用戶端返回成功。取值如下:
  • off:不需要等待WAL日誌寫入硬碟後才向用戶端返回成功。可以使用off0false或者no代替。
  • on:預設值,需要等待WAL日誌寫入硬碟後才向用戶端返回成功。可以使用ontrueyes或者1代替。
  • local:WAL記錄寫入並刷寫到本地磁碟。
  • remote_write:WAL記錄成功發送給備機,遠程備機確認寫入。
  • remote_apply:直到備機接收到的事務回放,才返回主機確認可以提交。
說明 PX下參數需要設定為on。

樣本

本樣本以簡單的單表查詢操作,來描述跨機並行查詢的功能是否有效。

樣本背景:

執行如下命令,建立test表並插入基礎資料。

CREATE TABLE test(id int);
INSERT INTO test SELECT generate_series(1,1000000);
EXPLAIN SELECT * FROM test;

預設情況下跨機並行查詢功能是不開啟的,單表查詢執行計畫為原生的Seq Scan,結果如下所示。

                       QUERY PLAN
--------------------------------------------------------
 Seq Scan on test  (cost=0.00..35.50 rows=2550 width=4)
(1 row)

通過以下步驟,開啟並使用跨機並行查詢功能:

  1. 對test表啟用跨機並行查詢功能。
    ALTER TABLE test SET (px_workers=1);
    SET polar_enable_px=on;
    EXPLAIN SELECT * FROM test;

    查詢結果如下:

                                      QUERY PLAN
    -------------------------------------------------------------------------------
     PX Coordinator 2:1  (slice1; segments: 2)  (cost=0.00..431.00 rows=1 width=4)
       ->  Seq Scan on test (scan partial)  (cost=0.00..431.00 rows=1 width=4)
     Optimizer: PolarDB PX Optimizer
    (3 rows)
  2. 查詢當前所有隻讀節點的名稱。

    查詢命令如下:

    SHOW polar_cluster_map;

    查詢結果如下:

     polar_cluster_map
    -------------------
     node1,node2,node3
    (1 row)

    可得出當前叢集有3個唯讀節點,名稱分別為:node1,node2和node3。

  3. 指定node1和node2隻讀節點參與跨機並行查詢。

    命令如下:

    SET polar_px_nodes='node1,node2';

    查詢參與並行查詢的節點:

    SHOW polar_px_nodes ;

    查詢結果如下:

     polar_px_nodes
    ----------------
     node1,node2
    (1 row)

效能資料

在5個唯讀節點的情況下,測試的效能資料如下:

  • SELECT COUNT(*)掃表的情境下,跨機並行查詢比單機並行查詢加速60倍。
  • 在TPC-H情境下,跨機並行查詢比單機並行查詢加速30倍。
    說明

    此處的TPC-H情境是基於TPC-H的基準測試,並不能與發行的TPC-H基準測試結果相比較,此處提及的測試結果並不符合TPC-H基準測試的所有要求。