本文介紹了彈性跨機並行查詢(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)