DBMS時間が長い時の確認ポイント
本記事ではデータベースの処理(DBMS時間)が遅い時に、確認するポイントを紹介しています。
主に確認しておきたいポイントは以下の通りです。
- 集計処理をプロシジャ処理の早いタイミングで実施できているか
- WHEREの条件式をプロシジャ処理の早いタイミングで実施できているか
- エージェントモニタの「DBMS I/O」が増加していく数 ※データベースの種類に依存
- WebFOCUSが発行しているSQLを確認して、データベースで直接実行する
集計処理をプロシジャ処理の早いタイミングで実施できているか
中間ファイル(HOLDファイル)やSQLパススルー等を使った二次検索を行っている場合のチェックポイントです。以降、中間ファイル(HOLDファイル)のことを「HOLD」と記載します。
よくある例①
HOLDを作成する際に明細データ(PRINT)で取得しているため、1つ目の処理の時間が長くなっていたり、HOLDの二次検索の集計で時間が掛かっている等があります。
TABLE FILE CAR
PRINT
COUNTRY SEATS SALES
ON TABLE HOLD AS HLD1
END
-RUN
TABLE FILE HLD1
SUM
SALES
BY
COUNTRY
ACROSS
SEATS
END
対応例①
HOLDを作成する際に集計(SUM)しておきます。
レポートのアウトプット時にACROSSを利用したい場合、HOLD作成時はBYの最後に指定しておきます。(以下サンプルではSEATS項目が該当)
TABLE FILE CAR
SUM
SALES
BY
COUNTRY
SEATS
ON TABLE HOLD AS HLD1
END
-RUN
TABLE FILE HLD1
SUM
SALES
BY
COUNTRY
ACROSS
SEATS
END
WHEREの条件式をプロシジャ処理の早いタイミングで実施できているか
こちらもHOLDやSQLパススルー等を使った二次検索を行っている場合のチェックポイントです。
よくある例②
HOLDの二次検索時に抽出条件(WHERE)を掛けていますが、作成時に掛けた方が効率よく処理ができます。
TABLE FILE CAR
SUM
SALES
BY
COUNTRY
SEATS
ON TABLE HOLD AS HLD1
END
-RUN
TABLE FILE HLD1
SUM
SALES
BY
COUNTRY
ACROSS
SEATS
WHERE COUNTRY EQ '&COUNTRY'
END
エージェントモニタの「DBMS I/O」が増加していく数
エージェントモニタの確認手順は「WebFOCUS Reporting Serverのプロセスの処理状況を確認しよう!」を参照してください。
確認したいポイントは、処理時間が長いプロシジャの「ステータス」と「DBMS I/O(SQLの結果レコード数)」です。
ステータスがDBMSコールの時に、DBMS I/Oが100等の定数で増加する場合は、FETCHSIZEの設定変更で性能を改善できる可能性があります。
以下の説明図のように、WebFOCUSとデータベース間のデータのやりとり(ラウンドトリップ)の回数が多いことでボトルネックになり期待する性能が出ない場合があります。
特にデータベースへのネットワークを変更した時に発生しやすい問題です。
FETCHSIZEの設定可否はデータベースの種類によって異なります。
WebFOCUSの設定として可能なデータベースの場合は、以下のような画面から確認ができます。
WebFOCUSの初期値は100ですが、500以上にしておくと効果が高くなる傾向があります。
WebFOCUSが発行しているSQLを確認して、データベースで直接実行する
SQLのトレースを取得方法は「WebFOCUSが発行するSQLを見てみよう!」を確認してください。取得できたSQLをWebFOCUSを介さずにデータベース側で実行してみて、性能差を確認します。