パフォーマンスの改善 データベースに一時ファイルを動的に作成(SAME_DB編)

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

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側にテーブルが作成されるため運用時に注意が必要です。

 ・自動削除されないオプションの場合にはテーブルの削除の運用を検討する必要があります。

 ・データベースに物理的にデータを保存しますので大量データが書き込まれる場合には注意が必要となる。