Tsurugi Advent Calendar 2023の8日目です。
Tsurugiのトランザクション分離レベルはSERIALIZABLEです。
他のRDBMSではトランザクション分離レベルが変更できるものもありますが、TsurugiはSERIALIZABLEのみです。
また、他のRDBMSではsnapshot isolationのことをSERIALIZABLEと言っているものもあるようですが、Tsurugiは真のSERIALIZABLE、だそうです。
SERIALIZABLEは、2つのトランザクションT1とT2を並列に実行したときに、T1→T2またはT2→T1の順に実行した結果のいずれかと同じ結果になる、というものです。
実行したトランザクションがこの条件を満たせない場合(トランザクションの処理内容が他のトランザクションと競合した場合)、SQL実行時やコミット時にシリアライゼーションエラーとなります。
このためTsurugiでは、selectのみのトランザクションであっても、必ず最後にコミットして、コミットが成功すること(シリアライゼーションエラーにならないこと)を確認しなければなりません。
シリアライゼーションエラーが発生した場合は、アプリケーション側でそのトランザクションを先頭から再実行する必要があります。
(再実行することによって、SERIALIZABLEの条件が満たされてトランザクションが成功する想定です(場合によっては、何度も再実行する必要があるかもしれません^^;))
※コメント投稿者のブログIDはブログ作成者のみに通知されます