本文介紹了彈性跨機并行查詢(ePQ)如何進行計算節點范圍選擇以及并行度控制。
前提條件
支持的PolarDB PostgreSQL版的版本如下:
PostgreSQL 11(內核小版本1.1.20及以上)
PostgreSQL 14(內核小版本14.6.6.0及以上)
您可通過如下語句查看PolarDB PostgreSQL版的內核小版本的版本號:
PostgreSQL 11
show polar_version;
PostgreSQL 14
select version();
簡介
PolarDB PostgreSQL版的彈性跨機并行查詢(ePQ)特性提供了精細的粒度控制方法,可以合理使用集群內的計算資源。在最大程度利用閑置計算資源進行并行查詢,提升資源利用率的同時,避免了對其它業務負載產生影響:
ePQ可以動態調整集群中參與并行查詢的計算節點范圍,避免使用負載較高的計算節點。
ePQ支持為每條查詢動態調整在計算節點上的并行度,避免ePQ并行查詢進程對計算資源的消耗影響到相同節點上的其他進程。
計算節點范圍選擇
參數說明
參數 | 說明 |
polar_px_nodes | 用于指定參與ePQ的計算節點范圍,默認值為空,表示所有只讀節點都參與ePQ并行查詢。 說明
|
polar_px_use_primary | 用于設置讀寫節點是否參與ePQ并行查詢,取值如下:
說明
|
polar_px_use_master | 用于設置讀寫節點是否參與ePQ并行查詢,取值如下:
說明
|
示例
安裝
polar_monitor
插件,用于獲取節點名稱。CREATE EXTENSION IF NOT EXISTS polar_monitor;
通過
polar_monitor
插件提供的集群拓撲視圖,查詢集群中所有計算節點名稱。SELECT name,slot_name,type FROM polar_cluster_info;
查詢結果如下:
name | slot_name | type -------+-----------+--------- node0 | | Primary node1 | standby1 | Standby node2 | replica1 | Replica node3 | replica2 | Replica (4 rows)
說明其中:
Primary
:表示讀寫節點。Replica
:表示只讀節點。Standby
:表示備庫節點。
使用負載較低的只讀節點
node2
和node3
參與ePQ并行查詢。SET polar_px_nodes = 'node2,node3'; SHOW polar_px_nodes;
結果顯示如下:
polar_px_nodes ---------------- node2,node3 (1 row)
并行度控制
參數說明
參數 | 說明 |
polar_px_dop_per_node | 用于設置當前會話中的ePQ查詢在每個計算節點上的執行單元(Segment)數量,每個執行單元會為其需要執行的每一個計劃分片(Slice)啟動一個進程。默認值為3,通用最佳實踐值為當前計算節點CPU核心數的一半。 說明
|
示例
創建一張表。
CREATE TABLE test(id INT);
假設集群內有兩個只讀節點,
polar_px_nodes
參數為空,此時ePQ將使用集群內的所有只讀節點參與并行查詢。polar_px_dop_per_node
參數的值為3
,表示每個計算節點上將會有三個執行單元。執行計劃如下。SHOW polar_px_nodes; polar_px_nodes ---------------- (1 row) SHOW polar_px_dop_per_node; polar_px_dop_per_node ----------------------- 3 (1 row) EXPLAIN SELECT * FROM test; QUERY PLAN ------------------------------------------------------------------------------- PX Coordinator 6:1 (slice1; segments: 6) (cost=0.00..431.00 rows=1 width=4) -> Partial Seq Scan on test (cost=0.00..431.00 rows=1 width=4) Optimizer: PolarDB PX Optimizer (3 rows)
從執行計劃中可以看出,兩個只讀節點上總計有六個執行單元(
segments: 6
)將會執行這個計劃中唯一的計劃分片slice1
,表示總計會有六個進程并行執行當前查詢。將
polar_px_dop_per_node
參數調整為4
,再次執行查詢,兩個只讀節點上總計會有八個執行單元參與當前查詢。由于執行計劃中只有一個計劃分片slice1
,則表示總計會有八個進程并行執行當前查詢。SET polar_px_dop_per_node TO 4; EXPLAIN SELECT * FROM test; QUERY PLAN ------------------------------------------------------------------------------- PX Coordinator 8:1 (slice1; segments: 8) (cost=0.00..431.00 rows=1 width=4) -> Partial Seq Scan on test (cost=0.00..431.00 rows=1 width=4) Optimizer: PolarDB PX Optimizer (3 rows)
設置
polar_px_use_primary
參數,讓讀寫節點也參與查詢,則讀寫節點上也將會有四個執行單元參與ePQ并行執行,集群內總計12個進程參與并行執行。SET polar_px_use_primary TO ON; EXPLAIN SELECT * FROM test; QUERY PLAN --------------------------------------------------------------------------------- PX Coordinator 12:1 (slice1; segments: 12) (cost=0.00..431.00 rows=1 width=4) -> Partial Seq Scan on test (cost=0.00..431.00 rows=1 width=4) Optimizer: PolarDB PX Optimizer (3 rows)