FINAL TABLEサポート3 DELETE から続きます。
FINALテーブルを使用したUPDATE/DELETEの並列処理
QAQQINI オプションを変更して SMP並列処理設定を有効にすると、プロセッサーをより有効に活用してパフォーマンスを著しく向上できる場合があります。FINAL TABLE では特に UPDATE または DELETE 操作のパフォーマンス向上が期待できます。 これらのステートメントを並列実行することで、使用可能なプロセッサーをより効率的に処理できるためです。
SMP 並列処理を使用するには、
・5770-SS1 - オプション 26(無償オプション) をインストール
・PARALLEL DEGREE *OPTIOMIZE 設定を使用することを推奨
・SMP 並列処理を使用すると、レコードが返される順序が影響を受ける可能性がある
・SMP は、照会を並列実行するタスクに CPU 処理と I/O 処理の両方を割り当てする
・CPU 並列処理のために複数のプロセッサーを備えたシステムが必要
並列処理のサンプル:パラレルUPDATE
手順①もしも、該当のジョブでQTEMP.QAQQINIファイルを作成していない場合、まず以下を実行し作成します。
CALL QSYS2.OVERRIDE_QAQQINI(1);
上記の結果、QTEMP.QAQQINIファイルが作成され、そのジョブで実行するSQLはこのQTEMP.QAQQINIファイルで制御可能になります。
手順②
下記は、営業部員ごとに 1000 ボーナスを加算するパラレル UPDATE の例 です。
-- Switch to Parallelism on QAQQINI options
call qsys2.override_qaqqini(2, 'PARALLEL_DEGREE', '*OPTIMIZE');
--
-- UPDATE with parallelism Example
-- benefit this when a Large table update needs to happen (say 1 Mil + records)
--
select count(*)
from final table(
UPDATE toystore.employee
SET bonus = bonus + 1000
) ;
手順③ QTEMP.QAQQINIファイルを明示的に削除する場合は以下を実行。
call qsys2.override_qaqqini(3);
※QTEMPなのでジョブ終了時にQTEMP.QAQQINIファイルも削除されるので、上記で削除する、しないは、ケースバイケースで実施してください。

実行時間ですが、確かに速い気がします^^;(冗談です、データ小さいのでWAKARANAI)
いちおう、QTEMP.QAQQINIが変わったか?の確認してみました。
SELECT * FROM QTEMP.QAQQINI WHERE QQPARM = 'PARALLEL_DEGREE' ;
(参考)ジョブ固有のQTEMP.QAQQINIの属性を変更するプロシージャー OVERRIDE_QAQQINI
別記事で軽く書きました。
guriguriさまから
PARALLEL_MIN_TIME QAQQINIオプションで指定された秒数 (デフォルト 60 秒) を超えて問い合わせが実行されるまでは、並列処理の使用を延期する
*IBM® i 7.5で PARALLEL_DEGREE OPTIMIZE 設定の動作が変更
と教えて頂きました : )
参考urlはこちら↓です。
参考:照会の並列処理の制御
システムまたはジョブに対して並列処理が有効になっている場合でも、個々の照会で非並列処理の実装が使用されることがあります。 この決定は、機能上の制約事項に関連している可能性があります。あるいは、オプティマイザーが非並列方式を選択する可能性があります。
並列アクセス方式で処理される照会は、主記憶域、CPU、およびディスク・リソースを積極的に使用します。
このため、IBM では、並列処理の使用を、分析ワークロードやレポート作成ワークロードで一般的に見られるような、より長時間実行される照会に制限することをお勧めします。 一般的なルールとして、並列処理は少なくとも 60 秒間実行される照会に適用するのが最適です。 IBM は、並列処理レベル *OPTIMIZE も推奨しています。これは、最適化プログラムが照会の計画と実行において最大の柔軟性を持つためです。 QQRYDEGREEシステム値でシステム全体の並列処理をアクティブにすることは推奨されない。
並列処理レベルは、システムレベルまたはジョブレベルで制御できる。 ジョブについては、CURRENT DEGREE特別レジスタまたはPARALLEL_DEGREE QAQQINIオプションのいずれかを使用することができる。
さらに、並列処理レベルが*OPTIMIZEとして指定されている場合、QAQQINIオプションで追加の制御が提供される:
照会エンジンは、システム CPU 使用率をアクティブにモニターします。 システム上で一定レベルの予約処理能力を提供するために、照会エンジンは、システム CPU 使用率が 80% を超えると、照会の処理に使用される並列タスクの数を減らします。 この動作は、PARALLEL_MAX_SYSTEM_CPU QAQQINI オプションを使用して無効にしたり変更したりすることができます。
並列処理のために照会によって使用される並列処理の量は、PARALLEL_DEGREE QAQQINI オプションの *OPTIMIZE 値とともにパーセンテージを指定することによって、削減または増加することができます。 このパーセンテージは、オプティマイザーが使用可能と見なすことができる並列処理の量に影響します。 例えば、8 つのプロセッサーを持つシステムでは、50 のパーセンテージは、ワークロード・グループなどの他の制約に従って、オプティマイザーがそれらのプロセッサーのうち最大 4 つを使用することを考慮することを意味します。
問い合わせエンジンは、PARALLEL_MIN_TIME QAQQINIオプションで指定された秒数を超えて問い合わせが実行されるまで、並列処理の使用を延期します。 照会が指定された時間より長く実行されると、オプティマイザーは並列処理の使用を検討します。 デフォルトの時間である 60 秒は、並列処理の使用を長時間実行照会に制限することを目的としています。通常、並列処理が最大の利点を提供します。 並列処理が有効であることが知られているワークロードでは、PARALLEL_MIN_TIMEを*NONEに設定することで、この時間遅延を無効にすることができます。
IBM i 7.5 以降で PARALLEL_DEGREE *OPTIMIZE 設定の動作が変更
Db2 対称マルチプロセッシング (SMP) が有効になっている場合、PARALLEL_DEGREE 値 *OPTIMIZE を使用すると、照会を実行する並列タスクの最適な数を照会オプティマイザーが判別できます。
ほとんどの環境では、SMP は、実行時間の長い照会に最大の利点を提供します。 この更新により、 Db2 for i は、ユーザーが構成可能な時間しきい値よりも長く実行される照会に対してのみ、最適化プログラムが SMP を考慮できるようにする機能を提供するようになりました。 これにより、最適化プログラムは、最も利点のある照会に特に SMP を適用することができます。 PARALLEL_DEGREE *OPTIMIZE または *OPTIMIZE% を指定して実行すると、すべての照会は最初に SMP を使用せずに実行されます。 照会が時間しきい値を超えた場合にのみ、SMP を使用することができます。 このフィーチャーは、 Db2 for i 7.5 PTF グループ SF99950 レベル 3 で提供されます。
