Symfoware ServerでREAD UNCOMMITTEDに設定した場合に参照されるデータについて
- 行ロックを利用している場合、インデックスの更新はコミット時に行われます。では、READ UNCOMMITTEDに設定した場合や占有モードをNO LOCKに設定した場合、ほかのトランザクションのまだコミットしていない更新データが参照されることになりますか?
- SELECT文の選択リストに指定されたカラムがインデックスキーであるかどうか、また、WHERE句に指定されたカラムがインデックスキーであるかどうかによって、参照される値が異なってきます。
以下の場合は、コミット前の値が参照されます。
- 選択リストに指定されたカラムがインデックスキーのみ、かつ、
- WHERE句に指定されたカラムもインデックスキーである場合
これはまだ更新されていないインデックスからデータが得られるためです。
以下の場合は、更新後の値が参照されます。
- 選択リストにインデックスキーでないカラムが存在する場合、または、
- WHERE句にインデックスキーでないカラムが指定されている場合
これはテーブルからデータを得るため、コミット前の更新データを参照するためです。
ただし、以下の場合は、該当データなしという結果になります。
- ほかのトランザクションによってインデックスキーとなるカラムが更新された状態で、かつ、
- WHERE句にインデックスキーとなるカラムを指定して検索を行い、かつ、
- インデックスキー以外のカラムの値を取り出そうとした場合
これは、更新前のインデックスを用いて検索を行いますが、テーブルのデータは更新されており、インデックスに対応するデータがなくなっているからです。
製品・サービス区分 | Symfoware | ||||
---|---|---|---|---|---|
製品・サービス情報 |
|
||||
アンサー種別 | 設計/開発 |