トランザクション処理に詳しくなろう
http://itpro.nikkeibp.co.jp/article/COLUMN/20080123/291846/
異常なリード
◆ダーティ・リード(未コミット読み取り)
他のトランザクションで更新されて,まだコミットされていないデータを読み取ってしまう。ロールバックされるとありえないデータを読み込んだことになる。
◆ファジー・リード(またはノンリピータブル・リード)
他のトランザクションの更新前とコミット後のデータを読んでしまうことにより一度読み込んだデータを再読み込みすると結果が異なる。
◆ファントム・リード(幻影読み取り)
他のトランザクションがデータの挿入,削除を行うとき,同じ検索条件で読んでいるのに,あったはずの行が消えたり,なかった行が現れたりする。
分離レベル
1. READ UNCOMMITTED
READ UNCOMMITTED(リード・アンコミッテッド)は,最も分離性が低い分離レベルです。他のトランザクションがコミットしていないデータを読み込んでしまいます。図2のダーティ・リード,ファジー・リード,ファントム・リードすべてを許容します。
2. READ COMMITTED
READ COMMITTED(リード・コミッテッド)は,2番目に分離性が低い分離レベルですが,未コミットのデータは読み取りません。具体的にはファジー・リード,ファントム・リードは許しますが,ダーティ・リードは抑止します。
3. REPEATABLE READ
REPEATABLE READ(リピータブル・リード)を指定すると,あるトランザクションが参照したデータは,そのトランクションが終了するまで,他のトランザクションで変更することができなくなります。具体的にはダーティ・リード,ファジー・リードを抑止して,ファントム・リードだけを許可します。
4. SERIALIZABLE
SERIALIZABLE(シリアライザブル)が最も分離性の高いレベルです。ダーティ・リード,ファジー・リード,ファントム・リードのいずれも抑止します。あるトランザクションが参照したデータを変更することができないだけでなく,参照に使用した条件に一致するデータを挿入することもできなくなるわけです。
異常なリードと分離レベル
ダーティー・リード | ファジー・リード | ファントム・リード | |
---|---|---|---|
リード・アンコミッティド | 許可 | 許可 | 許可 |
リード・コミッティド | 抑止 | 許可 | 許可 |
リピータブル・リード | 抑止 | 抑止 | 許可 |
シリアライザブル | 抑止 | 抑止 | 抑止 |
[カテゴリ: プログラミング全般]
[通知用URL]
Tweet
最終更新時間:2008年06月26日 22時14分30秒