Symfoware ServerでREAD UNCOMMITTEDに設定した場合に参照されるデータについて

行ロックを利用している場合、インデックスの更新はコミット時に行われます。では、READ UNCOMMITTEDに設定した場合や占有モードをNO LOCKに設定した場合、ほかのトランザクションのまだコミットしていない更新データが参照されることになりますか?
SELECT文の選択リストに指定されたカラムがインデックスキーであるかどうか、また、WHERE句に指定されたカラムがインデックスキーであるかどうかによって、参照される値が異なってきます。

以下の場合は、コミット前の値が参照されます。

  • 選択リストに指定されたカラムがインデックスキーのみ、かつ、
  • WHERE句に指定されたカラムもインデックスキーである場合

これはまだ更新されていないインデックスからデータが得られるためです。

以下の場合は、更新後の値が参照されます。

  • 選択リストにインデックスキーでないカラムが存在する場合、または、
  • WHERE句にインデックスキーでないカラムが指定されている場合

これはテーブルからデータを得るため、コミット前の更新データを参照するためです。

ただし、以下の場合は、該当データなしという結果になります。

  • ほかのトランザクションによってインデックスキーとなるカラムが更新された状態で、かつ、
  • WHERE句にインデックスキーとなるカラムを指定して検索を行い、かつ、
  • インデックスキー以外のカラムの値を取り出そうとした場合

これは、更新前のインデックスを用いて検索を行いますが、テーブルのデータは更新されており、インデックスに対応するデータがなくなっているからです。

製品・サービス区分 Symfoware
製品・サービス情報
対象製品 Symfoware Server (Native Interface)
プラットフォーム Windows, Solaris, Linux
アンサー種別 設計/開発
このページの先頭へ