すべてのプロダクト
Search
ドキュメントセンター

PolarDB:計算ノードのスケジュールとDOPの制御

最終更新日:May 28, 2024

このトピックでは、Elastic Parallel Query (ePQ) 機能を使用して、計算ノードをスケジュールし、必要な並列度 (DOP) を確保する方法について説明します。

前提条件

この機能は、次の要件を満たすPolarDB for PostgreSQLクラスターでサポートされています。

  • マイナーエンジンバージョンが1.1.20以降のPostgreSQL 11

  • マイナーエンジンバージョンが14.6.6.0以降のPostgreSQL 14

説明

次のいずれかのステートメントを実行して、PolarDB for PostgreSQLクラスターのマイナーエンジンバージョンを照会できます。

  • PostgreSQL 11

    ショーpolar_version;
  • PostgreSQL 14

    select version();

概要

ePQを使用すると、PolarDB for PostgreSQLクラスターの計算ノードにきめ細かい制御を実装できます。 これは、コンピューティングリソースの利用を改善する。 並列クエリにアイドルコンピューティングリソースを使用して、リソースの使用率を最大化し、他のワークロードの影響を防ぐことができます。 ePQには次の機能があります。

  • ePQを使用すると、PolarDB for PostgreSQLクラスターで並列クエリを実行するために、アイドルリソースを持つコンピューティングノードを動的にスケジュールできます。

  • ePQを使用すると、PolarDB for PostgreSQLクラスターの各計算ノードで並列クエリのDOPを動的に調整できます。 このように、並列クエリは、同じ計算ノードで実行される他のプロセスに影響を与えません。

計算ノードのスケジュール

Parameters

パラメーター

説明

polar_px_nodes

並列クエリの実行に使用される計算ノード。 既定では、このパラメーターは空のままで、すべての読み取り専用ノードが使用されることを指定します。

説明
  • 次のステートメントを実行して、並列クエリの実行に使用される計算ノードを照会できます。

    ショーpolar_px_nodes;
  • 一部の読み取り専用ノードの負荷が高い場合は、polar_px_nodesパラメーターを変更して、負荷の少ない読み取り専用ノードを指定し、並列クエリを実行できます。

  • polar_px_nodesパラメーターは、計算ノードのリストを指定します。 ノード名はコンマ (,) で区切ります。

polar_px_use_primary

プライマリノードを使用して並列クエリを実行するかどうかを指定します。 有効な値:

  • ON

  • オフ

説明
  • このパラメーターは、バージョンがPostgreSQL 14のPolarDB for PostgreSQLクラスターにのみ適用されます。

  • 次のステートメントを実行して、プライマリノードを使用して並列クエリを実行することを指定できます。

    SET polar_px_use_primaryにオン;

polar_px_use_master

マスターノードを使用して並列クエリを実行するかどうかを指定します。 有効な値:

  • ON

  • オフ

説明
  • このパラメーターは、バージョンがPostgreSQL 11のPolarDB for PostgreSQLクラスターにのみ適用されます。

  • 次のステートメントを実行して、マスターノードを使用して並列クエリを実行することを指定できます。

    SET polar_px_use_masterにオン;

  1. 次のステートメントを実行して、計算ノードの名前を返すために使用されるpolar_monitor拡張子をインストールします。

    存在しない場合は拡張を作成しますpolar_monitor;
  2. polar_monitor拡張機能で提供されるトポロジビューを使用して、クラスター内のすべての計算ノードの名前を照会します。

    SELECT name,slot_name,type FROM polar_cluster_info;

    次のサンプルコードは、クエリ結果の例を示しています。

    名 | slot_name | タイプ
    ------ ----------- ---------------
     node0 | | プライマリ
     node1 | standby1 | スタンバイ
     node2 | replica1 | レプリカ
     node3 | replica2 | レプリカ
    (4行) 
    説明

    次のタイプの計算ノードが返されます。

    • Primary: プライマリノード。

    • レプリカ: 読み取り専用ノード。

    • Standby: スタンバイノード。

  3. 次のステートメントを実行して、読み込みの少ない読み取り専用ノードnode2node3を使用し、並列クエリを実行します。

    SET polar_px_nodes = 'node2,node3';
    ショーpolar_px_nodes; 

    次のサンプルコードは、結果の例を示しています。

    polar_px_nodes
    ----------------
     node2,node3
    (1行) 

コントロールDOP

Parameters

パラメーター

説明

polar_px_dop_per_node

現在のセッションの並列クエリの各計算ノード上のセグメント数。 各セグメントは、実行するスライス毎に処理を開始する。 デフォルト値: 3。 ベストプラクティスを実行するには、このパラメーターを計算ノードのCPUコア数の半分に設定することを推奨します。

説明
  • 計算ノードのCPU負荷が高い場合は、このパラメーターを小さい値に設定できます。 各コンピュートノードのCPU使用率が80% 未満であることを確認してください。

  • クエリのパフォーマンスが不十分な場合は、このパラメーターをより大きな値に設定できます。 各コンピュートノードのCPU使用率が80% 未満であることを確認してください。 そうでなければ、他のバックグラウンドプロセスが遅くなる可能性があります。

  1. 次のステートメントを実行して、クラスターにテーブルを作成します。

    CREATE TABLEテスト (id INT);
  2. クラスターに2つの読み取り専用ノードがあり、polar_px_nodesパラメーターが空のままである場合、両方の読み取り専用ノードが並列クエリの実行に使用されます。 polar_px_dop_per_nodeパラメーターが3に設定されている場合、各計算ノードには3つのセグメントが含まれます。 次のサンプルコードは、実行計画の例を示しています。

    ショーpolar_px_nodes;
     polar_px_nodes
    ----------------
    
    (1行)
    
    ショーpolar_px_dop_per_node;
     polar_px_dop_per_node
    -----------------------
     3
    (1行)
    
    EXPLAIN SELECT * テストから;
                                      クエリ計画
    -------------------------------------------------------------------------------
     PXコーディネーター6:1 (slice1; セグメント: 6) (コスト=0.00 .. 431.00行=1幅=4)
       -> テスト時の部分的なSeqスキャン (コスト=0.00 .. 431.00行=1幅=4)
     Optimizer: PolarDB PX Optimizer
    (3行) 

    この例では、2つの読み取り専用ノード上の6つのセグメントのそれぞれが、実行プランの唯一のスライスであるslice1を実行するプロセスを開始します。 したがって、6つのプロセスが開始され、並列にクエリが実行される。

  3. polar_px_dop_per_nodeパラメーターを4に設定してから別のクエリを実行すると、2つの読み取り専用ノードで合計8つのセグメントが使用されます。 8つのセグメントのそれぞれは、実行計画のスライスslice1のみを実行する処理を開始する。 したがって、8つのプロセスが開始され、クエリが並列に実行される。

    SET polar_px_dop_per_nodeに4;
    
    EXPLAIN SELECT * テストから;
                                      クエリ計画
    -------------------------------------------------------------------------------
     PXコーディネーター8:1 (slice1; segments: 8) (コスト=0.00 .. 431.00行=1 width=4)
       -> テスト時の部分的なSeqスキャン (コスト=0.00 .. 431.00行=1幅=4)
     Optimizer: PolarDB PX Optimizer
    (3行) 
  4. polar_px_use_primaryパラメーターをONに設定します。これは、プライマリノードを使用して並列クエリを実行することを指定します。 この例では、プライマリノード上の4つのセグメントも使用されます。 したがって、12のプロセスが開始され、クエリが並列に実行される。

    SET polar_px_use_primaryにオン;
    
    EXPLAIN SELECT * テストから;
                                       クエリ計画
    ---------------------------------------------------------------------------------
     PXコーディネーター12:1 (slice1; segments: 12) (コスト=0.00 .. 431.00行=1 width=4)
       -> テスト時の部分的なSeqスキャン (コスト=0.00 .. 431.00行=1幅=4)
     Optimizer: PolarDB PX Optimizer
    (3行)