2.4.2 トランザクションの分離レベル

XDBでは,トランザクション処理の同時実行性を重視して,トランザクションの分離レベルにREAD COMMITTEDを採用しています。そのため,一度読み込んだデータを再度読み込む場合,ほかのトランザクションによって参照中の行が更新されると,タイミングによっては結果が異なることがあります。例を次に示します。

■例1:検索処理中にほかのスレッドからデータが更新された場合

スレッドA:SELECT C1 FROM T1
スレッドB:UPDATE T1 SET C1=200

スレッドAのSQL実行中に,スレッドBがSQLを発行してコミットすると,次のようなことが起こる可能性があります。
  1. スレッドAの1行目の取り出し時:C1の値は100
  2. スレッドBのコミット
  3. スレッドAの2行目の取り出し時:C1の値は200
■例2:更新処理中にほかのスレッドからデータが更新された場合

スレッドA:UPDATE T1 SET … WHERE C1=100
スレッドB:UPDATE T1 SET C1=100 WHERE C1=200

スレッドAのSQL実行中に,スレッドBがSQLを発行してコミットすると,更新対象となる行がタイミングによって異なる可能性があります。