並列処理のチューニング
バッファー・プールの可用性を確保して、論理的な競合と物理的な競合、および並列処理の度合いを低下させる可能性があるその他の状況を最小限に抑えることで、並列処理の使用を改善できます。
プロシージャー
並列処理を調整するには、以下のいずれかの方法を使用します
- バッファー・プールの可用性を向上させます。バッファプールの可用性によっては、 Db2 が並列処理の度合いを減らす場合があります(参照RAN REDUCED会計トレースレポートの例)または並列グループを実行する前にシーケンシャルプランに戻す(SEQ - NO BUF会計トレースレポートの例)
- ストレージ不足のバッファー・プールを判別するには、IFCID 0221 の QW0221C セクションを確認します。
- 次のパラメーターの値を増やすには、ALTER BUFFERPOOL コマンドを使用します。
- VPSEQT - 順次スチールしきい値。
- VPPSEQT - 並列順次しきい値。
- 並列しきい値パラメーターを増やしても、並列処理の度合いが向上しない場合は、ALTER BUFFERPOOL コマンドを使用して、全体のバッファー・プール・サイズ (VPSIZE) を増やします。統計トレースからの情報と、以下の公式トレースを使用して、必要なバッファー・スペース量を決めます。
QBSTJIS は、要求したプリフェッチ 入出力ストリームの合計数ですが、これは、バッファー・プールのストレージ不足のために 拒否されました。 (並列タスク当たり、存在するのは、1 つの入出力ストリームだけです。) QBSTPQFは、 Db2 が並列グループが計画通りに実行できるように十分なバッファページを割り当てることができなかった合計回数です。(QBSTJIS / QBSTPQF) × 32 = buffer increase value例えば、QBSTJIS の値は 100,000 で、QBSTPQF は 2500 で、以下の公式が適用されるとします。(100,000 / 2500) × 32 = 1280この場合、並列化の程度の低下という問題を軽減 するには、ALTER BUFFERPOOL を使用して現行の VPSIZE を 2560 バッファー 分だけ増やします。 DISPLAY BUFFERPOOL コマンドを使用して、VPSIZE パラメーターの現行の値を調べることができます。
- 論理的な競合を最小限に抑えます。例えば、入れ子ループ結合では、内部テーブルはパーティショニングされたテーブルスペースまたは非パーティショニングされたテーブルスペースに存在することができますが、 Db2 は、外部テーブルがパーティショニングされたテーブルスペースに存在する場合、並列結合操作を使用する可能性が高くなります。
- データ・パーティションを別個の物理デバイスに配置して、パーティションの数をコントローラー内の内部パスの数より少ない状態を保つことで、物理的な競合を最小限に抑えます。
- 更新可能カーソルの有無を確認します。実行時に、 Db2 はあいまいなカーソルが更新可能であると判断するかもしれません。 これは~に表示されますSEQ - CURSOR例示会計トレースレポートのフィールド
- 正しいハードウェアとソフトウェアのサポートを確認します。 実行時にハードウェアソート機能が利用できず、ソートマージジョインが必要な場合は、SEQ - NO ESA設定します。
- オンライン・プロセッサーの構成が変更されたかどうかを確認します。実行時にバインド時よりも少ないオンラインプロセッサしか利用できない場合、 Db2 は現在の処理能力を最大限に活用するために並列度を再計算します。 この再定式化は、の値によって示されるREFORM PARAL-CONFIG会計報告書の該当欄。
以下の例は、アカウンティング・トレース・レポートの一部を示しています。
図1: IBM® OMEGAMON® for Db2 Performance Expert on z/OS® の会計トレースレポートにおける並列処理フィールドを示す部分的なサンプル TIMES/EVENTS APPL (CLASS 1) DB2 (CLASS 2) CLASS 3 SUSP. ELAPSED TIME ------------ -------------- -------------- -------------- ------------ ELAPSED TIME 32.578741 32.312218 LOCK/LATCH 25.461371 NONNESTED 28.820003 30.225885 SYNCHRON. I/O 0.142382 STORED PROC 3.758738 2.086333 DATABASE I/O 0.116320 UDF 0.000000 0.000000 LOG WRTE I/O 0.026062 TRIGGER 0.000000 0.000000 OTHER READ I/O 3:00.404769 OTHER WRTE I/O 0.000000 CPU CP TIME 1:29.695300 1:29.644026 SER.TASK SWTCH 0.000000 AGENT 0.225153 0.178128 UPDATE COMMIT 0.000000 NONNESTED 0.132351 0.088834 OPEN/CLOSE 0.000000 STORED PRC 0.092802 0.089294 SYSLGRNG REC 0.000000 UDF 0.000000 0.000000 EXT/DEL/DEF 0.000000 TRIGGER 0.000000 0.000000 OTHER SERVICE 0.000000 PAR.TASKS 1:29.470147 1:29.465898 ARC.LOG(QUIES) 0.000000 ⋮ … QUERY PARALLEL. TOTAL --------------- -------- MAXIMUM MEMBERS 1 MAXIMUM DEGREE 10 GROUPS EXECUTED 1 RAN AS PLANNED 1 RAN REDUCED 0 ONE COOR=N 0 ONE ISOLAT 0 ONE DCL TTABLE 0 SEQ - CURSOR 0 SEQ - NO ESA 0 SEQ - NO BUF 0 SEQ - ENCL.SER. 0 MEMB SKIPPED(%) 0 DISABLED BY RLF NO REFORM PARAL-CONFIG 0 REFORM PARAL-NO BUF 0 - アクセスパスを選択する際に Db2 が想定する並列処理効率を制御するには、PARA_EFFサブシステムパラメータの値を設定します。推奨される設定は 50 です。並列処理の効率は、システム構成とワークロードによって異なります。
完全な並列処理効率は、 Db2 がすべての並列タスクに均一に作業を分散でき、システムリソース(プロセッサ、メモリ、バッファプール)が期待される並列処理の度合いを処理できることを前提としています。 多くの場合、作業の分散は均等ではなく、すべての並列タスクを同時に処理するための処理リソースは使用可能ではありません。 その結果、並列性の低い計画から並列性の高い計画に切り替えることを決定するために完璧な並列処理の効率を想定すると、パフォーマンスが不十分になることがあります。
PARA_EFF サブシステム・パラメーターの値には以下の意味があります。- 100
- Db2 並列処理の効率化によるコスト削減について、最も楽観的な想定を使用しています。 しかし、 Db2 は、より高度な並列処理がもたらすコスト削減効果を過大評価しているかもしれません。 そのような場合、 Db2 はより高い並列性を実現するアクセスパスを選択するかもしれませんが、実際には見積もられたコスト削減も経過時間の短縮も実現しない可能性があります。
- 1 から 99
- Db2 並列処理の効率性によるコスト削減を考慮しますが、並列処理の度合いによって提供されるコスト削減の見積もりを比例的に削減して使用します。 値が 1 に近くなるほど、予期される並列処理の度合いがアクセス・パスの選択に及ぼす効果は少なくなります。 一方、値が100に近いほど、 Db2 は、推定または実際のコストが高くなる可能性があっても、より高い並列性の推定値を提供するアクセスパスを選択する可能性が高くなります。
- 0
- Db2 並列処理によるコスト削減の見込みを考慮することなく、シーケンシャルなコストが最も低いアクセスパスを選択します。 ただし、この設定では、アクセス・パスの選択時に並列処理の考慮のみなくなります。 選択したアクセス・パスに並列処理を使用することを防ぐことはしません。