Tsurugi Advent Calendar 2023の9日目です。
Tsurugiでは、トランザクション開始時にトランザクションオプションを指定します。中でもトランザクション種別は必須です。
指定できるトランザクション種別は、OCC・LTX・RTXの3種類です。これらの説明は、Tsurugiの書籍のp.179やp.185に載っています。(そこはIceaxe(Javaライブラリー)の章なので、Javaに興味が無い人は読み飛ばすかもしれませんが、Java以外でも必要な事項が載っていたりします^^;)
- OCC
- 実行時間が短いトランザクション(いわゆるオンライン処理向け)
- SQL実行時点でコミットされている最新データを読む(READ COMMITTEDと同様)
- LTXと競合すると、基本的にOCCがシリアライゼーションエラーになる
- 他のOCCと競合すると、先にコミットした方が優先で、後からコミットした方がシリアライゼーションエラーになる
- LTX
- 実行時間が長いトランザクション(いわゆるバッチ処理向け)
- LTX開始時点のデータを読む
- 他のLTXと競合すると、先に始まった方が優先される。一番最初に始まったLTXは、シリアライゼーションエラーにならない
- RTX
- 読み取り専用トランザクション(selectしか実行できない)
- RTX開始以前のデータを読む
- 他トランザクションと競合しない