パフォーマンスの改善 データベースに一時ファイルを動的に作成(SAME_DB編)
SAME_DBとは
WebFOCUSでは出力形式「SAME_DB」を使用すること一時ファイルをデータベースに物理的に生成することができます。
一時ファイルを用いた再検索や、一時ファイルを用いた結合を行う場合にもデータベースにデータを保持し、処理が行われることでWebFOCUSサーバの負荷が軽減し、レスポンスの改善を見込める場合があります。
物理ファイル(.ftm)と出力形式「SAME_DB」との処理の違い
一般的に活用する物理ファイル(.ftm)と出力形式「SAME_DB」との処理を説明し、それぞれの処理の違いを説明します。
物理ファイルで一時ファイル作成の場合
①WebFOCUSからDBのデータを検索します。
②検索結果のデータを[.ftm]形式の物理ファイルとして各リクエストごとに、WebFOCUSサーバ上に生成します。
③WebFOCUSサーバー上にて結合処置を行います
④レポートを生成・出力します
プロシジャ記述例 (物理ファイル)
Oracle の EMP 表を利用した場合のサンプルです
TABLE FILE EMP
SUM
SAL
BY DEPTNO
WHERE ENAME EQ 'SMITH';
ON TABLE HOLD FORMAT BINARY
END
SAME_DBで一時ファイル作成の場合
①プロシジャ実行時に、結合処理に使用するデータを、各リクエストごとにDB上に物理テーブルとして生成します
②生成したテーブルを基に、DB側で結合処理が行います
③検索結果をWebFOCUSへ返します
④WebFOCUSにてレポートを生成し、ブラウザへ返します
プロシジャ記述例(SAME_DB)
Oracle の EMP 表を利用した場合のサンプルです
TABLE FILE EMP
SUM
SAL
BY DEPTNO
WHERE ENAME EQ 'SMITH';
ON TABLE HOLD AS AHLD FORMAT SAME_DB PERSISTENCE GLOBAL_TEMPORARY
END
物理ファイルのHOLDファイルとSAME_DBのHOLDの違い
出力形式 | 出力形式 | 保存内容 |
物理ファイル(.ftm) | WebFOCUSサーバに保持 | WebFOCUSサーバに物理ファイルとして保持 |
SAME_DB | データベースに保持 | 一時テーブルに実データとして保持 |
出力形式BINARYやALPHAなど一般的なHOLDファイルの出力形式の場合にはWebFOCUSサーバに一時ファイルを作成します。出力形式SAME_DBではデータベースに一時ファイルデータを一時テーブルとして作成いたします。この作成場所により、一時ファイルの再検索や一時ファイルを用いた結合でパフォーマンスの違いがでます。
構文
ON TABLE HOLD [AS filename] FORMAT SAME_DB [PERSISTENCE persistValue]
・filename
HOLD ファイル名を指定します。データベースに物理的に作成する名称となります。
省略すると、一時テーブルの名前はデフォルトの「HOLD」になります。
・PERSISTENCE
テーブルの持続タイプと関連したテーブルプロパティを指定します。
一時テーブルをサポートする DBMS ではオプションです。
・persistValue
VOLATILE | 一時的なシノニム (マスターファイルとアクセスファイル) が自動的に作成されます。このシノニムは、サーバセッションの終了とともに無効になります。 ※Oracleではサポートされません。 |
GLOBAL_TEMPORARY | テーブルが存在する間、その定義が他のデータベースセッションやユーザに表示されます。テーブル内のデータは表示されません。永続的なシノニム (マスターファイルとアクセスファイル) が自動的に作成されます。 ※DB2、Infomix、MySQLではサポートされません。 |
PERMANENT | 標準の永続テーブルの作成を指定します。永続的なシノニム (マスターファイルとアクセスファイル) が自動的に作成されます。 |
データベースの種類により指定できないオプションがあります。
使用例
Oracle の EMP 表とDEPT 表を利用した場合のサンプルです 。
‐*EMPを検索してAHLDという一時テーブルをデータベースに作成 TABLE FILE EMP SUM ENAME BY DEPTNO BY EMPNO ON TABLE HOLD AS AHLD FORMAT SAME_DB PERSISTENCE GLOBAL_TEMPORARY END -RUN -*データベースに作成した一時ファイルのAHLDとデータベースのテーブルを結合 JOIN LEFT_OUTER DEPTNO IN DEPT TO UNIQUE DEPTNO IN AHLD AS J0 END TABLE FILE DEPT SUM ENAME BY DEPTNO END
発行されるSQLの例
SELECT
T1."DEPTNO",
MAX(T2."ENAME")
FROM
( WEBFOCUS.DEPT T1
LEFT OUTER JOIN
AHLD T2
ON T2."DEPTNO" = T1."DEPTNO" )
GROUP BY
T1."DEPTNO"
ORDER BY
T1."DEPTNO";
注意点
・データベースによっては使用できないオプションがあります。
・検索DB側にテーブルが作成されるため運用時に注意が必要です。
・自動削除されないオプションの場合にはテーブルの削除の運用を検討する必要があります。
・データベースに物理的にデータを保存しますので大量データが書き込まれる場合には注意が必要となる。