データベースの学習をしているとトランザクションと分離レベルについて出てくると思います。今回はトランザクション・ACID特性・分離レベルについて学んでいきましょう。
今回はトランザクションと分離レベルについてお勉強しよう!
トランザクションと分離レベルとは?
分離レベルについて学習する前にトランザクションについてみてみましょう。
トランザクションとは?
トランザクション(transaction)とは、一連の処理のまとまりのことです。
よく挙げられる例として、銀行振り込みがあります。Aさんの口座からBさんの口座に1万円振り込むとしましょう。このときSQLは次のようになります。
UPDATE 銀行口座 SET 残高 = 残高 - 10000 WHERE 口座番号 = 'Aさんの口座番号';
UPDATE 銀行口座 SET 残高 = 残高 + 10000 WHERE 口座番号 = 'Bさんの口座番号';
となります。このとき、最初のSQLだけ実行後、障害等が発生して2つ目のSQLが実行されなかった場合、Aさんの残高だけが減り、Bさんの残高は増えないので、データの整合性が取れないことになります、このようなことが起こらないようにするために機能がDBMSにはあらかじめ備わっています。
ACID特性とは
トランザクションとは、次のACID(アシッド)特性を持ちます。トランザクションの信頼性は、ACID特性を持つことによって得られます。
ACID特性 | 意味 | 管理機能 |
---|---|---|
原子性 (Atomicity) | トランザクションは完全に実行されるか、 全く実行されないかのどちらかでなければならない | コミットメント制御 |
一貫性 (Consistency) | トランザクションは整合性が保たれなければない | 排他制御 |
独立性 (Isolation) | トランザクションは同時に実行しても、 単独で実行しても同じ結果でなければならない | 排他制御 |
耐久性 (Durability) | 障害が発生した場合でも、 トランザクションの結果は失われないようにしなければならない。 | 障害回復 |
コミットとロールバック
トランザクション内の処理の結果を確定することをコミット(Commit)、処理を取り消してトランザクション開始前の状態に戻すことをロールバック(rollback)といいます。
独立性を阻害する要因
独立性を阻害する要因として、ダーティリード、ノンリピータブルリード、ファントムリードの3つがある。
ダーティリード(dirty read)
他のトランザクションで更新された、コミット前のデータを読み込んでしまうこと。コミットされずにロールバックされた場合に、不整合が発生する。
ノンリピータブルリード(non-repeatable read)
同じデータを2回読みとったとき、異なる内容となること。
1回目と2回目の間に他のトランザクションによってデータが更新され、不整合が発生する。
ファントムリード(phantom read)
2回データを読み取ったとき、新しい内容が追加されてしまうこと。1回目と2回目の間に他のトランザクションによってデータが追加されてしまうことで不整合が発生する。
分離レベル
分離レベルとは、トランザクションの独立性をどの程度保つかのレベルになります。分離レベルは以下の4つがあります。
分離レベル | 説明 |
---|---|
SERIALIZABLE | 最も分離レベルが高い。複数のトランザクションを実行させても、一通ずつ実行した場合と同じ結果になる。ダーティリード、ノンリピータブルリード、ファントムリードが発生しない。しかし、排他待ちが起こりやすいため、トランザクションのスループットは一番悪くなる。 |
REPEATABLE READ | 繰り返し同じデータを読み取ったとき、同じ結果であることを保証する。ダーティリード、ノンリピータブルリードは発生しないが、ファントムリードは発生する。 |
READ COMMITTED | コミットされたデータだけを読みとる。ダーティリードは発生しないが、ノンリピータブルリード、ファントムリードは発生する。 |
READ UNCOMMITTED | 最も分離レベルは低い。コミットされていない情報も結果として返される。ダーティリード、ノンリピータブルリード、ファントムリードは発生する。トランザクションのスループットは一番良い。 |
分離レベルとダーティリード、ノンリピータブルリード、ファントムリードが発生するかまとめると以下のようになります。
分離レベル | ダーティリード | ノンリピータブルリード | ファントムリード |
---|---|---|---|
SERIALIZABLE | 発生しない | 発生しない | 発生しない |
REPEATABLE READ | 発生しない | 発生しない | 発生する |
READ COMMITTED | 発生しない | 発生する | 発生する |
READ UNCOMMITTED | 発生する | 発生する | 発生する |
まとめ
データベーススペシャリスト試験で覚えないといけない内容は以下になります。
データベーススペシャリストを攻略
- トランザクションとは
- ACID特性とは
- ダーティリード、ノンリピータブルリード、ファントムリードとは
- 分離レベルとは
以上の4つに何も見ないで説明できるようになりましょう。
今回はトランザクションと分離レベルについてお勉強したよ!