全部產品
Search
文件中心

PolarDB:計算節點範圍選取與並行度控制

更新時間:Jul 06, 2024

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

說明
  • 通過以下命令,查看參與ePQ的計算節點範圍。

    SHOW polar_px_nodes;
  • 如果部分唯讀節點負載較高,則可以通過修改polar_px_nodes參數設定僅特定幾個唯讀節點參與ePQ並行查詢。

  • polar_px_nodes參數的合法格式是一個以英文逗號分隔的節點名稱列表。

polar_px_use_primary

用於設定讀寫節點是否參與ePQ並行查詢,取值如下:

  • ON:讀寫節點參與ePQ並行查詢。

  • OFF:讀寫節點不參與ePQ並行查詢。

說明
  • 該參數適用於PostgreSQL 14。

  • 執行以下命令,設定讀寫節點參與ePQ並行查詢。

    SET polar_px_use_primary TO ON;

polar_px_use_master

用於設定讀寫節點是否參與ePQ並行查詢,取值如下:

  • ON:讀寫節點參與ePQ並行查詢。

  • OFF:讀寫節點不參與ePQ並行查詢

說明
  • 該參數適用於PostgreSQL 11。

  • 執行以下命令,設定讀寫節點參與ePQ並行查詢。

    SET polar_px_use_master TO ON;

樣本

  1. 安裝polar_monitor外掛程式,用於擷取節點名稱。

    CREATE EXTENSION IF NOT EXISTS polar_monitor;
  2. 通過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:表示備庫節點。

  3. 使用負載較低的唯讀節點node2node3參與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核心數的一半。

說明
  • 如果計算節點的CPU負載較高時,可以酌情遞減該參數,控制計算節點的CPU佔用率至80%以下。

  • 如果查詢效能不佳時,可以酌情遞增該參數,也需要保持計算節點的CPU佔用率不高於 80%。否則可能會拖慢其他的後台進程。

樣本

  1. 建立一張表。

    CREATE TABLE test(id INT);
  2. 假設叢集內有兩個唯讀節點,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,表示總計會有六個進程並存執行當前查詢。

  3. 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)
  4. 設定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)