DBMS時間が長い時の確認ポイント

2024年3月23日テクニカルメモ

本記事ではデータベースの処理(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を介さずにデータベース側で実行してみて、性能差を確認します。