ページの先頭行へ戻る
Symfoware Server V12.1.2 アプリケーション開発ガイド
FUJITSU Software

12.2.2 開発

並列検索は、以下の手順で使用します。

1. 事前準備

パラメータの設定

並列検索を使用する場合、以下のパラメータを設定します。

注意

デフォルトでは動作しないため、必ずパラメータを設定してください。

パラメタ名

用途

デフォルト

値の指標

max_worker_processes

システム全体で発生するワーカーの上限を設定します。

8

max_parallel_workersと同じ値を指定します。

max_parallel_workers

システム全体で発生する並列検索のワーカーの上限を設定します。

0
(並列検索機能は動作しません)

インスタンスとして制限する必要がない場合は、サーバのコア数を指定します。

将来的にCPUコア数を動的に増やす場合には、変更後のコア数を設定しておくことで、Symfoware Serverを再起動する必要がなくなります。

参照

パラメータの詳細および設定については、“運用ガイド”の“パラメータ”を参照してください。


対象SQL文の確認

対象のSQL文が“Seq Scan”または“Parallel Seq Scan”となるかをEXPLAIN文で確認します。ただし、“12.1 動作条件”を満たしていない場合は、並列処理は動作しません。

2. 効果の確認

上記の1を実施した状態で、対象のSQL文を“EXPLAIN ANALYZE”で実行することで、並列処理が動作したかを確認することができます。

以下に、EXPLAIN ANALYZEの出力結果例を示します。

postgres=# EXPLAIN ANALYZE select * from test_time where f1 > 0;
                                    QUERY PLAN                  
         ----------------------------------------------------------------
          Parallel Seq Scan on test_time  (cost=0.00..25206.88 rows=52428800 width=8) 
          (actual  time=0.025.. 25206.782 rows=11000 loops=1)
           Filter: (f1 > 0)
          Degree of parallelism: 6 query execution percentage: 20%
Degree of parallelism: 4 query execution percentage: 30%
Degree of parallelism: 2 query execution percentage: 50%
Total runtime: 26210.231 ms

“Parallel Seq Scan”が表示され、実行時の並列度と割合を確認できます。このとき、Degree of parallelismがmax_parallel_workers_per_queryと同じ値であり、かつquery execution percentageが100%であるとき、最も効果が得られていると判断できます。


また、“EXPLAIN”により、SQL文のみの評価として、並列化が選択されるかを確認することができます。

postgres=# EXPLAIN select * from test_time;
                                    QUERY PLAN                  
         ----------------------------------------------------------------
          Parallel Seq Scan on test_time  (cost=0.00..25206.88 rows=52428800 width=8)

上記の結果から、以下の場合に、チューニングを行います。

並列化されない
  • SQL文の実行時点で、システムリソースに十分な空きがあるかを確認します。(CPU使用率)
    SQL文の実行時点で、サーバ内にコア1個分のCPU使用率の空きが必要です。例えば、コアの搭載数が2であり、コア1の使用率が60%、コア2の使用率が20%であれば並列検索がスケジュールされますが、コア1の使用率が60%、コア2の使用率が50%ならば並列検索はスケジュールされません。

  • 以下のパラメータを確認します。

    • “max_parallel_workers”に、0が指定されていないか

    • “enable_parallelscan”に、offが指定されていないか

    • 対象テーブルのサイズ(ページ数)が“parallel_scan_pages_threshold”の値より大きいか

    上記に該当しない場合は、パラメータ“parallel_scan_cost_factor”の値を小さくして、再確認してください。


レスポンスが改善されない

チューニングにより改善される可能性があります。“EXPLAIN ANALYZE”の結果から、以下を確認してください。

  • インスタンスとして、“max_parallel_workers”の値をサーバのコア数よりも小さい値に制限していて、CPU使用率に余裕がある場合は、“max_parallel_workers”の値を大きくして、再確認してください。また、“max_parallel_workers_per_query”を“max_parallel_workers”よりも小さい値で指定している場合は、“max_parallel_workers_per_query”の値を大きくして、再確認してください。

  • 並列検索の対象となるSQL文を複数同時に実行すると、各SQL文が均等にCPUを使えるようにするために、システムが各SQLのワーカープロセスの多重度を小さくします。このため、1つのSQL文の処理のレスポンスを速くしたい場合には、並列検索の対象となるSQL文の同時実行数を減らしてください。