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

AnalyticDB:JITコンパイルを使用した計算の高速化

最終更新日:Sep 27, 2024

AnalyticDB for PostgreSQL V7.0は、Just-In-Time (JIT) コンパイル機能をサポートしています。 この機能は、解釈されたプログラムの形式を、CPUが実行できるネイティブプログラムに変換します。 これは計算を加速する。

背景情報

JITコンパイルは、オンライン分析処理 (OLAP) データベースのCPUバインドクエリ機能を改善するための効果的な方法です。 AnalyticDB for PostgreSQL V7.0は、JITコンパイルを使用して、式 (WHERE句、リスト、集計、予測など) の計算とタプルのアンパックを高速化できます。

テーブルに大量のデータが含まれている場合は、JITコンパイルを使用して、単一列の集計シナリオで最大20% のパフォーマンスを向上させることができます。 JITコンパイルにより、CPUバインドクエリのパフォーマンスが向上します。 データの量が多いほど、効果は良くなります。 ただし、テーブルに少量のデータが含まれている場合、JITコンパイルは、追加のJITオーバーヘッドとコンパイル時間の延長によりパフォーマンスを低下させます。 ビジネスシナリオに基づいてJITコンパイルを使用します。

この例では、JITコンパイルを有効にする前後のクエリ実行時間を比較します。

  1. テストテーブルを作成し、テーブルにデータを挿入します。

    CREATE TABLE jit_test (id serial);
    INSERT INTO jit_test (id) select * from generate_series(1, 100000000);
    ANALYZE jit_test;
  2. JITコンパイルが有効になっていないときに、実行計画の実行期間を照会します。

    EXPLAIN ANALYZE SELECT avg(id) FROM jit_test;

    次の実行プランが返されます。 実行時間は13,445.055ミリ秒です。

                                                                      QUERY PLAN
    -----------------------------------------------------------------------------------------------------------------------------------------------
     Finalize Aggregate  (cost=453326.89..453326.90 rows=1 width=32) (actual time=13444.050..13444.050 rows=1 loops=1)
       ->  Gather Motion 3:1  (slice1; segments: 3)  (cost=453326.83..453326.88 rows=3 width=32) (actual time=13064.601..13444.006 rows=3 loops=1)
             ->  Partial Aggregate  (cost=453326.83..453326.84 rows=1 width=32) (actual time=13443.451..13443.452 rows=1 loops=1)
                   ->  Seq Scan on jit_test  (cost=0.00..369995.67 rows=33332467 width=4) (actual time=0.191..7151.999 rows=33335145 loops=1)
     Optimizer: Postgres query optimizer
     Planning Time: 0.447 ms
       (slice0)    Executor memory: 40K bytes.
       (slice1)    Executor memory: 38K bytes avg x 3 workers, 38K bytes max (seg0).
     Memory used:  128000kB
     Execution Time: 13445.055 ms
    (10 rows)
  3. JITコンパイルを有効にし、実行プランで実行期間を照会します。

    SET jit to on;
    SET optimizer to off;
    EXPLAIN ANALYZE SELECT avg(id) FROM jit_test;

    次の実行プランが返されます。 JITコンパイルを有効にすると、実行時間は1747.94ミリ秒短縮されます。

                                                                      QUERY PLAN
    -----------------------------------------------------------------------------------------------------------------------------------------------
     Finalize Aggregate  (cost=453326.89..453326.90 rows=1 width=32) (actual time=11695.112..11695.113 rows=1 loops=1)
       ->  Gather Motion 3:1  (slice1; segments: 3)  (cost=453326.83..453326.88 rows=3 width=32) (actual time=10926.392..11690.101 rows=3 loops=1)
             ->  Partial Aggregate  (cost=453326.83..453326.84 rows=1 width=32) (actual time=11693.964..11693.965 rows=1 loops=1)
                   ->  Seq Scan on jit_test  (cost=0.00..369995.67 rows=33332467 width=4) (actual time=0.213..6529.483 rows=33335145 loops=1)
     Optimizer: Postgres query optimizer
     Planning Time: 0.492 ms
       (slice0)    Executor memory: 40K bytes.
       (slice1)    Executor memory: 38K bytes avg x 3 workers, 38K bytes max (seg0).
     Memory used:  128000kB
     JIT:
       Functions: 4
       Options: Inlining false, Optimization false, Expressions true, Deforming true
       Timing: Generation 0.870 ms, Inlining 0.000 ms, Optimization 0.295 ms, Emission 4.462 ms, Total 5.627 ms
     Execution Time: 11697.065 ms
    (14 rows)