4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQL Serverのトランザクションの分離レベルについて簡単なまとめ

Last updated at Posted at 2018-10-05

概要

SQL Serverに、複数のトランザクションが同時に実施されるとき、下記のようなデータの不整合現象が発生する。

・ダーティ リード(dirty read)

トランザクションAが、トランザクションBの処理最中でまだコミットしてないものを、読み出す現象。

・反復不可能読み取り

トランザクションAが、同じレコードを2回読む間に、トランザクションBが該当レコードを更新したため、2回の読む結果が違う現象。

・ファントムリード(Phantom lead)

トランザクションAが、2回読む間に、トランザクションBが削除、挿入をしたため、2回の読む結果が違う現象。

分離レベルとは

上記の不整合現象を防ぐために、トランザクション分離レベルが定義されている。

1、通常類分離レベル(Lockで制御)

・READ UNCOMMITTED

【no Lock】
未コミット状態のデータであっても読み込む。

・READ COMMITTED

【読む文時点だけLock】
コミットされたデータのみを読み込む。
しかし、他Transactionでコミットされた結果が反映されてしまう。
⇒ 同じレコードを2回読む間に変更により【反復不可能読み取り】が発生

・REPEATABLE READ

【Transaction Lock (insert,delete除き)】
他Transactionでコミットされた結果が反映されない。
⇒【反復不可能読み取り】が抑える。
しかし、削除、挿入により不整合【ファントムリード】が発生

・SERIALIZABLE

【Transaction Lock (insert,delete含む全SERIAL)】
他削除、挿入により
【ファントムリード】まで抑える。

効果

【READ UNCOMMITTED】 -> 【READ COMMITTED】 -> 【REPEATABLE READ】 -> 【SERIALIZABLE】
Lockを付けてる期間が多くて、データの整合性が高くなる一方、待ち時間が多くなって、並行性が低くなってしまう。

2、SNAPSHOT類分離レベル(tmpdbとversionで制御)

分離効果は通常との似ているのが、
方式は、lockを使わずTEMPDBを消費してデータを保存して、バージョンでコントロールすること。
で、性能上はupdateやdeleteに悪い影響だが、読むにはよい影響。

###・SNAPSHOT
分離効果は【SERIALIZABLE】と同様

###・READ COMMITTED SNAPSHOT
分離効果は【READ COMMITTED】と同様

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?