Symfoware ServerでREAD UNCOMMITTEDを利用した場合の留意点について
Symfoware Server (Native Interface)のよくあるご質問を検索できます。
Symfoware Server の技術情報はこちら
- READ UNCOMMITTEDを利用した場合の検索において、ほかのトランザクションで更新した順番でレコードを参照することができませんでした。READ UNCOMMITTEDを利用した時の動作について教えてください。
- 独立性水準にREAD UNCOMMITTEDを指定した場合、またはSELECT文の占有モードにNO LOCKを指定した場合、ほかのトランザクションで更新し、まだCOMMITされていないデータが読み込まれる現象(ダーティ・リード)が発生する可能性があります。このため、読み込まれるデータの一貫性、および他トランザクションで更新した順番でのデータの読み込みは保証されません。
以下にダーティ・リードにより発生する事象例を示します。- 検索条件にインデックスのキーとなるカラムを指定した場合と指定しない場合とで、検索結果が異なる場合がある。
- ORDER BY句を指定した場合と指定しない場合とで、検索結果が異なる場合がある。
- 他トランザクションで後から更新したデータは参照できるが、先に更新したデータが参照できない場合がある。
- 他トランザクションで更新の対象となったレコードの更新前データおよび更新後データともに参照できない場合がある。
このような事象を避けるためには、SELECT文の占有モードにFREE LOCK/SHARE LOCK/EXCLUSIVE LOCKのいずれかを指定、もしくは独立性水準にREAD COMMITTED/REPEATABLE READ/SERIALIZABLEのいずれかを指定する必要があります。
※占有モードや独立性水準の変更により、データの一貫性を保証するためのロックが取得され、ロック待ちやデッドロックが発生する可能性があります。アプリケーション多重実行の動作検証を実施して、業務影響が発生しないことを確認してください。
詳細は以下のマニュアルを参照してください。
Symfoware Server V12.2.0 アプリケーション開発ガイド(共通編)
第1部 アプリケーション開発における基礎知識
第1章 アプリケーションの設計に必要な概念
1.1 トランザクションと排他制御
なお、上記以外の製品バージョン/レベルについては、該当するマニュアル箇所を参照してください。
製品・サービス区分 | Symfoware | ||||
---|---|---|---|---|---|
製品・サービス情報 |
|
||||
アンサー種別 | 設計/開発 |