アクセスプランの確認ポイントとしては、以下があります。
処理に時間がかかるアクセス方式が選択されていないか、インデックスが適切に使用されているかを確認します。
適切なジョイン系アクセスモデルが選択されているかを確認します
SQL文に対するアドバイスを確認します。また、ASSIST指定が有効となっているかを確認します。
ソート作業域、ワーク作業域が不足していないかを確認します。
参照
アクセスプランの出力形式や出力内容は、“Symfoware Server SQLTOOLユーザーズガイド”を参照してください。
アクセス方式を確認する
アクセスプランのSCANエレメントのscan typeでアクセス方式を確認します。
[アクセスプランの出力例]
Access plan:
Convert SQL statement:
SELECT TBL1.C2 FROM USR1.TBL1 WHERE TBL1.C1=?
:
[1] SCAN ELEMENT
table name USR1.TBL1
scan type INDEX KEY SCAN(1)
:
scan typeの表示内容 | アクセス方式 |
---|---|
TABLE KEY SCAN | 表をキー値で検索 |
TABLE ALL SCAN | 表の全文検索 |
TABLE PARALLEL SCAN | 表の全件を並列に検索 |
INDEX KEY SCAN(n) | インデックス検索 |
INDEX ALL SCAN | インデックスの全件を順検索 |
INDEX TABLE SCAN(n) | インデックスをキー範囲検索しながら表のレコードも取り出す |
処理に時間がかかるアクセス方式が選択されていないか、インデックスが適切に使用されているかを確認します。
適切なアクセス方式でない場合には、アクセス方式をチューニングします。
アクセス方式のチューニング方法については、“5.4.1 アクセス方式のチューニング”を参照してください。
ジョイン方法を確認する
アクセスプランのセクション情報で、ジョイン方法を確認します。
[アクセスプランの出力例]
===============================================================
Main query
=sno===sectname=====input1========input2========output/update======
1 : M-JOIN [TBL1_IX1_DSO] [ ] [ ]
[TBL2_IX1_DSO ] [ ] [APPL ]
--------------------------------------------------------------------
セクション名の表示内容 | 意味 | 特長 |
---|---|---|
M-JOIN | マージジョインを行う | 複数の表をジョインキー(ジョインで使用する列)のデータの昇順に読み込み、ジョインキーの等しい行を結合します。 |
F-JOIN | フェッチジョインを行う | 一般的には、大量データのジョインには向きません。反面、少量データのジョインには向いています。 |
N-JOIN | ネスティドループジョインを行う | ジョインする表のすべてのレコードを組み合わせて結合を行うため、ジョイン結果を求めるのに時間がかかります。 |
ジョイン方法の特長を考慮し、適切なジョイン方法が選択されているかを確認します。ジョイン方法の選択が適切でない場合には、ジョイン方法をチューニングします。
参照
ジョイン方法についての詳細は、“Symfoware Server アプリケーション開発ガイド(共通編)”を参照してください。
また、チューニング方法については、“5.4.2 ジョイン方法のチューニング”、“5.4.3 ジョイン順のチューニング”を参照してください。
アドバイスを確認する
アクセスプランの“Advice to an SQL statement”で、アドバイスを確認します。
[アクセスプランの出力例]
Access plan:
Convert SQL statement:
SELECT COUNT(*) FROM USR1.TBL1
Advice to an SQL statement:
JYP2401I 表の全件検索を行います.
アドバイスは、以下の場合に出力されます。
ASSIST指定が無効となっている場合
SQL文に対するアドバイスがある場合
アドバイスが出力されている場合には、出力された内容に応じて、チューニングを実施します。
チューニング方法については、“5.4.4 アドバイスに応じたチューニング”を参照してください。
ソート作業域、ワーク作業域を確認する
アクセスプランのセクション情報で、出力先の資源名を確認します。
[アクセスプランの出力例]
================================================================= Main query =sno===sectname=====input1========input2======output/update====== 1 : SCAN [TBL1IXDSO1 ] [ ] [SORT0001 ] -------------------------------------------------------------------
入力資源名(input1/input2)、出力資源名(output/update)として、以下が表示されている場合は、ソート作業域、ワーク作業域が使用されています。
SORTxxxx
WORKxxxx
次に、SQL性能情報の実行エレメント情報に出力される以下の内容を確認します。
実行エレメント名 | 詳細情報 | 出力内容 |
---|---|---|
SORT SCAN | file size | ソート処理時の作業ファイル使用量 |
run merge | マージした回数 | |
SORT INSERT SCAN | file size | ソート処理時の最大作業ファイル使用量 |
run merge | マージした回数 | |
WORK SCAN | file size | ワーク処理時の作業ファイル使用量 |
WORK INSERT SCAN | file size | ワーク処理時の最大作業ファイル使用量 |
SQL性能情報は、以下の方法で取得することができます。
rdbexecsqlコマンドを使用する
クライアント用の動作環境ファイルのパラメタ(SQL_TRACE)を指定する
参照
SQL性能情報の取得方法および出力内容については、“Symfoware Server SQLTOOLユーザーズガイド”を参照してください。
SQL文のソート処理や一時作業処理で使用するメモリが、動作環境ファイルで指定したメモリサイズを超えた場合、作業ファイルが作成されます。SQL文は、その作業ファイルを使用して処理が実行されますが、SQL実行時、作業ファイルを大量に使用すると、性能が劣化する可能性があります。
また、ソート処理時に、2回以上のマージ処理が行われていることで、メモリが不足し、性能が悪くなっている可能性があります。
これらの場合には、ソートサイズ、ワークサイズのチューニングを実施します。
チューニング方法については、“5.4.5 ソートサイズ、ワークサイズのチューニング”を参照してください。