支援使用跨機並行查詢功能進行分析型查詢,實現一定的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 | 指定參與跨機並行查詢的唯讀節點。預設為空白,表示所有隻讀節點都參與。可配置為指定節點參與跨機並行查詢,以逗號分隔。例如: |
| polar_px_enable_replay_wait | 的主節點與唯讀節點存在一定程度的延遲,當主節點執行DDL語句(例如CREATE TABLE),唯讀節點需要耗時回放該DDL日誌後才可見新建立的表。當設定polar_px_enable_replay_wait為on後,跨機並行查詢啟用強一致性,當前發起的跨機並行查詢請求路由到唯讀節點上執行時,需要唯讀節點回放到該查詢請求前最近的一條日誌後,才會執行查詢請求。該參數預設為off,即關閉強一致性,在資料庫主備日誌延遲較高時,不保證唯讀節點可以讀到最近的DDL記錄。您可配置 該參數可以指定資料庫角色進行開啟。 |
| 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的表才使用該功能。例如:
|
| synchronous_commit | WAL相關配置參數,指定當資料庫提交事務時是否需要等待WAL日誌寫入硬碟後才向用戶端返回成功。取值如下:
說明 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)
通過以下步驟,開啟並使用跨機並行查詢功能:
- 對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) - 查詢當前所有隻讀節點的名稱。
查詢命令如下:
SHOW polar_cluster_map;查詢結果如下:
polar_cluster_map ------------------- node1,node2,node3 (1 row)可得出當前叢集有3個唯讀節點,名稱分別為:node1,node2和node3。
- 指定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基準測試的所有要求。