トランザクション分離レベルについて
前提
- SQL Serverについてです
- ややこしいとこだけ書きます
スナップショット関係
SQL Serverにはスナップショット関係のトランザクション分離レベルが以下の2つ存在します。
- READ_COMMITTED_SNAPSHOT
- スナップショット分離レベル
この2つはよく似ていて、どちらもテーブルレベルのSCH-Sロックのみを取得し、行ロックやページロックは行いません。違いはREAD_COMMITTED_SNAPSHOTではステートメントレベルでの読み取り一貫性を担保するのに対し、スナップショット分離レベルではトランザクションレベルでの読み取り一貫性を担保するという所だけです。
既定の分離レベル
SQL Serverでは既定のトランザクション分離レベルを以下の2つから選択できます。
- READ_COMMITTED
- READ_COMMITTED_SNAPSHOT
既定のトランザクション分離レベルはデータベースのプロパティの「Is Read Committed Snapshot On」で設定ができます。無効(既定)の場合はREAD_COMMITTED、有効の場合はREAD_COMMITTED_SNAPSHOTになります。
スナップショット関係の設定
「READ_COMMITTED_SNAPSHOT」は前述の通り、データベースのプロパティで「Is Read Committed Snapshot On」を有効にすれば、既定のトランザクション分離レベル(トランザクションで明示的に指定しない場合の分離レベル)が「READ_COMMITTED_SNAPSHOT」になります。
「スナップショット分離レベル」はデータベースのプロパティで「スナップショット分離を許可」を有効にし、かつトランザクションで明示的に「SET TRANSACTION ISOLATION LEVEL SNAPSHOT」を指定した際に有効になります。