WebFOCUSのSQLの最適化機能を無効にしよう!

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

概要

WebFOCUSは検索対象のデータベースからのレスポンスを向上させるために最適化されたSQLをデータベースに発行します。

SQLが最適化されることにより性能問題が発生する場合があり、(たとえば、WebFOCUSのDEFINEコマンドに指定したIF THEN ELSEが SQLのCASE文に最適化される)この際、最適化の機能を無効にすることで性能が改善されるかを試すのは有益です。

プロシジャにコマンドを指定することでSQLの最適化を無効にすることができます。

サンプル

以下のENGINEコマンドをプロシジャの先頭に追加します。

ENGINE SQLORA SET OPTIMIZATION OFF

※Oracleが検索対象の場合

コマンド解説

SQLの最適化を無効化

ENGINE xxxxxx SET OPTIMIZATION OFF

赤字の部分は検索対象により異なります。マスターファイルのSUFFIXの箇所を確認してください。

マスターファイルの例

FILENAME=SEIHIN, SUFFIX=SQLMSS  , $
  SEGMENT=SEIHIN, SEGTYPE=S0, $
    FIELDNAME=製品コード, ALIAS=製品コード, USAGE=A5V, ACTUAL=A5V,
      MISSING=ON, $
    FIELDNAME=製品名, ALIAS=製品名, USAGE=A18V, ACTUAL=A18V,

SUFFIXがSQLMSSですので、この場合はMS SQL Serverが検索対象です。

SQLの最適化を無効化するコマンド指定時の注意点

最適化を無効にするコマンドをedasprof.prfに設定すると、WebFOCUSの処理すべてにおいてSQLの最適化が無効になります。検索処理すべてをWebFOCUS内部で処理することになり、レスポンスに大きな影響が及びます。最適化を無効にするコマンドはプロシジャごとに指定することを推奨します。