トランザクションについて整理する

概要

DB周りを再度学び直していて、トランザクションについて学びがあったのでまとめる。

トランザクションとは?

複数のデータ更新処理を1つの単位にまとめたもの。 COMMITするとトランザクション確定させる。 ROLLBACKするとトランザクションを取り消す。

同時実行制御について

普段アプリケーションを通じて、自分以外の多くの人が検索 / 更新 / 削除など同時並行でトランザクションが実行されている。 この時、トランザクションの分離性(Isolation)を保つにはどうしたら良いのか?

ロックの問題点

ロックの問題点を解消するには?

トランザクションの結果整合性を緩やかにしていく妥協策 => 4つのトランザクション分離レベルという妥協策

Serializableは結果整合性が強く担保されるが、それ以外は担保されないケースがある。 つまり、上3つを採用すると何かしらデメリットがある。 そのデメリットは下記の3つ。

分離レベル毎に生じる問題をまとめると下記の表になる。 テーブル

多くのDBMSがRead Committedを採用しているよう。

所感

DBMSは分離性をどう担保するかで苦労したんだろうな。