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

:テーブルサイズまたはコストに基づいてePQを使用するかどうかを決定する

最終更新日:Jan 23, 2025

では、テーブルサイズまたは実行計画のコストに基づいてePQを使用するかどうかを決定できます。

背景情報

ePQは、実行時間が長い複雑なOLAPクエリを処理するのに適していますが、実行時間が短い単純なOLTPクエリには適していません。 短期間のクエリでは、接続の確立、データの交換、計算ノード間の接続の解放のオーバーヘッドがパフォーマンスを低下させます。 では、テーブルサイズまたは実行計画のコストに基づいてePQを使用するかどうかを決定できるため、パフォーマンスを向上させるための適切な実行モードを選択できます。

注意事項

コストしきい値とテーブルサイズしきい値は、次のオブジェクトまたは操作に対してのみ指定できます。

  • 共通テーブル

  • パーティション分割されたテーブル

  • 具体化されたビュー

  • ePQヒントなしのクエリ (/* + PX() */)

Parameters

パラメーター

説明

polar_px_min_pg_plan_cost

ePQを有効にするための実行プランの最小コスト。 有効な値: 0 ~ 999999999999 デフォルト値: 50000 ePQは、単一ノードの実行プランコストのコストがこのしきい値未満の場合、無効になります。

polar_px_min_table_scan_size

ePQを有効にするための最小テーブルサイズ。 有効な値: 0 ~ 2147483647 デフォルト値: 100 MB。 クエリに含まれるすべてのテーブルのサイズがこのしきい値未満の場合、ePQは無効になります。

polar_px_force_use

クエリにePQを強制するかどうかを指定します。 有効な値:

  • on

  • off (デフォルト)

使用法

  1. データを準備します。

    CREATE TABLEテスト (id INT);
    INSERT INTOテストSELECT generate_series(1、1000);
    分析テスト; 
  2. 実行計画のコストを照会します。

    ePQを明示的に無効にし、単一のノードで実行プランを照会します。

    SET polar_enable_pxオフ;
    テストからの選択カウント (*) を説明します。
                              クエリ計画
    --------------------------------------------------------------
     集計 (コスト=17.50 .. 17.51行=1幅=8)
       -> Seqテストでスキャン (コスト=0.00 .. 15.00行=1000幅=0)
    (2行) 

    上記の実行計画では、各行のcost=xxx .. xxxは、現在の演算子の推定実行コストを示します。 起動コストは前に表示されます.. そして総費用はそれの後に表示されます。 最上位の演算子の総コストは、このクエリの総実行コストと見なすことができます。 たとえば、前の実行プランの17.51は合計実行コストです。 単一ノードの実行プランの合計コストは、polar_px_min_pg_plan_costパラメーターで定義されたコストしきい値よりも低いため、ePQが有効になっていてもePQは使用されません。

    SET polar_enable_pxをオンにします。テストからの選択カウント (*) を説明します。
                              クエリ計画
    --------------------------------------------------------------
     集計 (コスト=17.50 .. 17.51行=1幅=8)
       -> Seqテストでスキャン (コスト=0.00 .. 15.00行=1000幅=0)
    (2行) 
  3. テーブルサイズを照会します。

    pg_relation_size関数を使用して、テーブルサイズを照会できます。

    SELECT pg_size_pretty(pg_relation_size('test'));
     pg_size_pretty
    ----------------
     40 kB
    (1行) 

    上記の結果は、testテーブルのサイズが40 kBであることを示しています。これは、polar_px_min_table_scan_sizeパラメーターで定義されたテーブルサイズのしきい値よりも低くなっています。 したがって、ePQが有効になっている場合でも、テストテーブルのみを参照するクエリではePQは使用されません。

    SET polar_enable_pxをオンにします。テストAS a、テストAS b、テストAS cからの選択カウント (*) WHERE a.id > b.id AND b.id > c.id;
                                        クエリ計画
    ----------------------------------------------------------------------------------
     集計 (コスト=5292822.50 .. 5292822.51行=1幅=8)
       -> ネストされたループ (コスト=0.00 .. 5015045.00行=111111000幅=0)
             参加フィルター :( b.id > c.id)
             -> ネストされたループ (コスト=0.00 .. 15032.50行=333333幅=4)
                   参加フィルター :( a.id > b.id)
                   -> Seqテストaのスキャン (コスト=0.00 .. 15.00行=1000幅=4)
                   -> マテリアライズ (コスト=0.00 .. 20.00行=1000幅=4)
                         -> Seqスキャンテストb (コスト=0.00 .. 15.00行=1000幅=4)
             -> マテリアライズ (コスト=0.00 .. 20.00行=1000幅=4)
                   -> Seqテストcのスキャン (コスト=0.00 .. 15.00行=1000幅=4)
    (10行) 
  4. 指定されたしきい値を無視します。

    コストしきい値とテーブルサイズしきい値を無視するには、polar_px_force_useパラメーターを使用してクエリにePQを強制します。

    SET polar_enable_pxをオンにします。polar_px_force_useをオンに設定します。テストからの選択カウント (*) を説明します。
                                         クエリ計画
    -------------------------------------------------------------------------------------
     集計の完了 (コスト=0.00 .. 431.00行=1幅=8)
       -> PXコーディネーター6:1 (slice1; セグメント: 6) (コスト=0.00 .. 431.00行=1幅=8)
             -> 部分集約 (コスト=0.00 .. 431.00行=1幅=8)
                   -> 部分Seqテストスキャン (コスト=0.00 .. 431.00行=167幅=1)
     Optimizer: PolarDB PX Optimizer
    (5行) 
  5. データを挿入し、実行計画のコストを照会します。

    ePQを有効にするための条件を満たすようにテーブルにデータを挿入します。

    INSERT INTOテストSELECT generate_series(1、10000000);
    分析テスト; 

    testテーブルのサイズが、polar_px_min_table_scan_sizeパラメーターで定義された最小テーブルサイズを超えています。

    SELECT pg_size_pretty(pg_relation_size('test'));
     pg_size_pretty
    ----------------
     348 MB
    (1行) 

    実行プランのコストも、polar_px_min_pg_plan_costパラメーターで定義された最小コストを超えています。

    SET polar_enable_pxオフ;
    テストからの選択カウント (*) を説明します。
                                           クエリ計画
    -----------------------------------------------------------------------------------------
     集計の完了 (コスト=97621.42 .. 97621.43行=1幅=8)
       -> 収集 (コスト=97621.21 .. 97621.42行=2幅=8)
             Workers Planned: 2
             -> 部分集約 (コスト=96621.21 .. 96621.22行=1幅=8)
                   -> テスト時のパラレルSeqスキャン (コスト=0.00 .. 86205.77行=4166177幅=0)
    (5行) 

    ePQが有効になっている場合、上記のクエリにはePQが使用されます。

    SET polar_enable_pxをオンにします。polar_px_force_useをオフに設定します。テストからの選択カウント (*) を説明します。
                                          クエリ計画
    --------------------------------------------------------------------------------------
     集計の完了 (コスト=0.00 .. 470.76行=1幅=8)
       -> PXコーディネーター6:1 (slice1; セグメント: 6) (コスト=0.00 .. 470.76行=1幅=8)
             -> 部分集約 (コスト=0.00 .. 470.76行=1幅=8)
                   -> 部分Seqテストスキャン (コスト=0.00 .. 467.66行=1666471幅=1)
     Optimizer: PolarDB PX Optimizer
    (5行)