Symfoware Parallel Server RDBユーザーズガイド 応用プログラム開発編 |
目次
索引
![]() ![]() |
第7章 応用プログラムとトランザクション処理 |
応用プログラムからデータベースへアクセスする場合には、トランザクション単位にSymfoware/RDBで排他制御を行います。排他の属性には、以下のものがあります。
占有の資源
占有の単位
占有モード
占有待ちの有無
以下に、排他の属性の選択方法と、排他の属性の各項目の概要を説明します。
排他の属性の選択には、以下の方法があります。
Symfoware/RDBによる選択
動作環境ファイルの実行パラメタや、SET TRANSACTION文が指定されなかった場合、Symfoware/RDBがSQL文を解釈し、その結果をもとに選択します。
動作環境ファイルの実行パラメタによる指定
動作環境ファイルの実行パラメタDSO_LOCKおよびISOLATION_WAITによって指定します。DSO_LOCKおよびISOLATION_WAITの記述形式については、“応用プログラムの動作環境のチューニング”を参照してください。実行パラメタを省略した場合は、Symfoware/RDBが選択した属性で排他制御を行います。
動作環境ファイルの実行パラメタによって設定できる属性は、以下のとおりです。
SET TRANSACTION文による指定
応用プログラム中にSET TRANSACTION文の独立性水準指定によって、占有の強さについて設定することができます。SET TRANSACTION文の詳細は、“SQLリファレンスガイド”を参照してください。
占有する対象の資源は、その応用プログラムで使用する表のDSIおよびインデックスのDSIです。
占有制御によって資源を占有する単位には、ぺージ単位およびDSI単位があります。
ぺージ単位の占有の場合には、応用プログラムがアクセスするデータを含むぺージが占有の対象になります。DSI単位の占有の場合には、応用プログラムがアクセスするデータを含むDSIが占有の対象になります。
動作環境ファイルでDSO_LOCKを指定しなかった場合は、Symfoware/RDBによって占有の単位が選択されます。
Symfoware/RDBは、SQL文ごとに、そのSQL文でアクセスするデータの範囲(ぺージ数)を算定します。その範囲(ぺージ数)の大きさに応じて、表:Symfoware/RDBによる占有単位の選択条件に示すように占有単位を選択しています。
占有単位 |
選択条件 |
---|---|
ページ |
アクセスするデータの範囲が小さい場合 |
DSI |
アクセスするデータの範囲が大きい場合 |
たとえば、表を全件処理する場合には、表のデータを格納している全DSIに対してDSI単位の占有を選択します。また、SQL文の探索条件を解析し、アクセスするぺージが少ないと算定した場合には、ぺージ単位の占有を選択します。なお、アクセスするデータの量が少なくても、その範囲(ぺージ数)が大きい場合には、DSI単位の占有を選択します。
データベースにアクセスする場合のモードには、参照モードと更新モードの2種類があります。
データに対する占有モードの選択条件を示します。
応用プログラムの動作環境ファイルの実行パラメタDSO_LOCKを指定すると、データ操作のSQL文を実行したときのデータに対する占有モードを指定することができます。表:動作環境ファイルの実行パラメタによる占有モードの選択方法に示すように、DSO単位に指定します。
参照モード指定 |
更新モード指定 |
実行パラメタそのもの の指定なし |
---|---|---|
指定DSOの全DSIを参照モード |
指定DSOの全DSIを更新モード |
すべてSymfoware/RDBによる選択に従う |
動作環境ファイルでDSO_LOCKを指定しなかった場合は、Symfoware/RDBによって占有モードが選択されます。Symfoware/RDBは、アクセスするデータに対して、表:Symfoware/RDBによる占有モードの選択条件に示す条件で、SQL文ごとにデータに対する占有モードを選択します。
占有モード |
選択条件 |
---|---|
参照モード |
データを参照する処理の部分の場合 |
更新モード |
データを更新する処理の部分の場合 |
データ検索を行う以下のSQL文については、アクセスするデータに対する占有モードは参照モードになります。また、これらのSQL文については、インデックスに対する更新が行われないので、インデックスに対するモードは参照モードになります。
OPEN文(ただし、カーソル宣言の更新可能性句にFOR UPDATEを指定したカーソルのOPEN文は、更新モードで占有します。)
単一行SELECT文
FETCH文
データの更新、削除および挿入を行う以下のSQL文については、処理(更新、削除および挿入)対象のデータに対する占有モードは、更新モードになります。ただし、データ更新、削除および挿入を行うSQL文であっても、内部的に参照しか行わない部分に関しては、参照モードになります。
UPDATE文(探索)
UPDATE文(位置づけ)
DELETE文(探索)
DELETE文(位置づけ)
INSERT文
インデックスに対する占有モードの選択条件を示します。
応用プログラムの動作環境ファイルの実行パラメタDSO_LOCKを指定すると、データ操作のSQL文を実行したときのインデックスに対するアクセスモードを指定することができます。表:動作環境ファイルの実行パラメタによるインデックスに対する占有モードの選択方法に示すように、インデックスのDSO単位に指定します。
占有モード |
選択方法 |
---|---|
参照モード |
DSO名のあとにSHを指定した場合 |
更新モード |
DSO名のあとにEXを指定した場合、または省略した場合 |
動作環境ファイルでDSO_LOCKを指定しなかった場合は、Symfoware/RDBによって占有モードが選択されます。Symfoware/RDBは、SQL文の処理で使用するインデックスの更新の有無により、表:Symfoware/RDBによるインデックスに対する占有モードの選択条件のように選択します。
インデックスに対する占有モード |
インデックス更新の有無 |
---|---|
更新モード |
インデックス更新あり |
参照モード |
インデックス更新なし |
データ更新を行う以下のSQL文については、更新対象の列に設定されているインデックスに対して更新が行われます。したがって、そのようなインデックスに対する占有モードは更新モードになります。一方、更新対象でない列に設定されているインデックスに対しては、更新は行われないので、そのようなインデックスに対する占有モードは参照モードになります。
UPDATE文(探索)
UPDATE文(位置づけ)
データ削除および挿入を行う以下のSQL文については、更新対象の表に張られているインデックスに対して更新が行われます。したがって、そのようなインデックスに対する占有モードは更新モードになります。
DELETE文(探索)
DELETE文(位置づけ)
INSERT文
トランザクション間で資源(行、ページ、DSI)に対して競合が発生した場合、その時点で占有待ちに入る(資源が解放されるまで待つ)場合と、応用プログラムに復帰する場合があります。
占有待ちを行います。
応用プログラムの動作環境ファイルの実行パラメタISOLATION_WAITで、表:動作環境ファイルの実行パラメタでの占有待ちの有無の選択方法に示すように指定します。
占有待ちの有無 |
選択方法 |
---|---|
占有待ちになる |
WAITを指定した場合、または省略した場合 |
応用プログラムに復帰する |
REJECTを指定した場合 |
目次
索引
![]() ![]() |