WebFOCUSのSQLの最適化機能を無効にしよう!
概要
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内部で処理することになり、レスポンスに大きな影響が及びます。最適化を無効にするコマンドはプロシジャごとに指定することを推奨します。