計(jì)算節(jié)點(diǎn)范圍選擇與并行度控制
本文介紹了彈性跨機(jī)并行查詢(ePQ)如何進(jìn)行計(jì)算節(jié)點(diǎn)范圍選擇以及并行度控制。
前提條件
支持的PolarDB PostgreSQL版的版本如下:
PostgreSQL 11(內(nèi)核小版本1.1.20及以上)
PostgreSQL 14(內(nèi)核小版本14.6.6.0及以上)
您可通過如下語句查看PolarDB PostgreSQL版的內(nèi)核小版本的版本號(hào):
PostgreSQL 11
show polar_version;
PostgreSQL 14
select version();
簡(jiǎn)介
PolarDB PostgreSQL版的彈性跨機(jī)并行查詢(ePQ)特性提供了精細(xì)的粒度控制方法,可以合理使用集群內(nèi)的計(jì)算資源。在最大程度利用閑置計(jì)算資源進(jìn)行并行查詢,提升資源利用率的同時(shí),避免了對(duì)其它業(yè)務(wù)負(fù)載產(chǎn)生影響:
ePQ可以動(dòng)態(tài)調(diào)整集群中參與并行查詢的計(jì)算節(jié)點(diǎn)范圍,避免使用負(fù)載較高的計(jì)算節(jié)點(diǎn)。
ePQ支持為每條查詢動(dòng)態(tài)調(diào)整在計(jì)算節(jié)點(diǎn)上的并行度,避免ePQ并行查詢進(jìn)程對(duì)計(jì)算資源的消耗影響到相同節(jié)點(diǎn)上的其他進(jìn)程。
計(jì)算節(jié)點(diǎn)范圍選擇
參數(shù)說明
參數(shù) | 說明 |
polar_px_nodes | 用于指定參與ePQ的計(jì)算節(jié)點(diǎn)范圍,默認(rèn)值為空,表示所有只讀節(jié)點(diǎn)都參與ePQ并行查詢。 說明
|
polar_px_use_primary | 用于設(shè)置讀寫節(jié)點(diǎn)是否參與ePQ并行查詢,取值如下:
說明
|
polar_px_use_master | 用于設(shè)置讀寫節(jié)點(diǎn)是否參與ePQ并行查詢,取值如下:
說明
|
示例
安裝
polar_monitor
插件,用于獲取節(jié)點(diǎn)名稱。CREATE EXTENSION IF NOT EXISTS polar_monitor;
通過
polar_monitor
插件提供的集群拓?fù)湟晥D,查詢集群中所有計(jì)算節(jié)點(diǎn)名稱。SELECT name,slot_name,type FROM polar_cluster_info;
查詢結(jié)果如下:
name | slot_name | type -------+-----------+--------- node0 | | Primary node1 | standby1 | Standby node2 | replica1 | Replica node3 | replica2 | Replica (4 rows)
說明其中:
Primary
:表示讀寫節(jié)點(diǎn)。Replica
:表示只讀節(jié)點(diǎn)。Standby
:表示備庫節(jié)點(diǎn)。
使用負(fù)載較低的只讀節(jié)點(diǎn)
node2
和node3
參與ePQ并行查詢。SET polar_px_nodes = 'node2,node3'; SHOW polar_px_nodes;
結(jié)果顯示如下:
polar_px_nodes ---------------- node2,node3 (1 row)
并行度控制
參數(shù)說明
參數(shù) | 說明 |
polar_px_dop_per_node | 用于設(shè)置當(dāng)前會(huì)話中的ePQ查詢?cè)诿總€(gè)計(jì)算節(jié)點(diǎn)上的執(zhí)行單元(Segment)數(shù)量,每個(gè)執(zhí)行單元會(huì)為其需要執(zhí)行的每一個(gè)計(jì)劃分片(Slice)啟動(dòng)一個(gè)進(jìn)程。默認(rèn)值為3,通用最佳實(shí)踐值為當(dāng)前計(jì)算節(jié)點(diǎn)CPU核心數(shù)的一半。 說明
|
示例
創(chuàng)建一張表。
CREATE TABLE test(id INT);
假設(shè)集群內(nèi)有兩個(gè)只讀節(jié)點(diǎn),
polar_px_nodes
參數(shù)為空,此時(shí)ePQ將使用集群內(nèi)的所有只讀節(jié)點(diǎn)參與并行查詢。polar_px_dop_per_node
參數(shù)的值為3
,表示每個(gè)計(jì)算節(jié)點(diǎn)上將會(huì)有三個(gè)執(zhí)行單元。執(zhí)行計(jì)劃如下。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)
從執(zhí)行計(jì)劃中可以看出,兩個(gè)只讀節(jié)點(diǎn)上總計(jì)有六個(gè)執(zhí)行單元(
segments: 6
)將會(huì)執(zhí)行這個(gè)計(jì)劃中唯一的計(jì)劃分片slice1
,表示總計(jì)會(huì)有六個(gè)進(jìn)程并行執(zhí)行當(dāng)前查詢。將
polar_px_dop_per_node
參數(shù)調(diào)整為4
,再次執(zhí)行查詢,兩個(gè)只讀節(jié)點(diǎn)上總計(jì)會(huì)有八個(gè)執(zhí)行單元參與當(dāng)前查詢。由于執(zhí)行計(jì)劃中只有一個(gè)計(jì)劃分片slice1
,則表示總計(jì)會(huì)有八個(gè)進(jìn)程并行執(zhí)行當(dāng)前查詢。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)
設(shè)置
polar_px_use_primary
參數(shù),讓讀寫節(jié)點(diǎn)也參與查詢,則讀寫節(jié)點(diǎn)上也將會(huì)有四個(gè)執(zhí)行單元參與ePQ并行執(zhí)行,集群內(nèi)總計(jì)12個(gè)進(jìn)程參與并行執(zhí)行。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)