トランザクション
2022-10-01 (土) 11:41:25
トランザクション †
- 複数のユーザーが同時にアクセスしてデータの参照や更新が行われても、データの矛盾が発生しないデータベースの仕組みのこと
トランザクションの特性 †
ACID特性 †
原子性(Atomicity) †
- 更新処理のトランザクションが正常終了した場合のみ、データベースへの反映が保証される性質のこと
- COMMITとROLLBACKにより実現される
一貫性(Consistency) †
- トランザクションによって、データベース内のデータの整合性が保たれていること
隔離性(Isolation) †
- 複数のトランザクションが同時(並列)に実行された場合も、個々のトランザクションの独立性が保たれることにより、処理結果が直列で実行した場合と同じであること
- ロックにより実現される
耐久性(Durability) †
- トランザクションが正常終了した後のデータベースのデータの状態が保たれていること(トランザクションの再実行が不要な状態であること)
同時実行制御 †
- 並列性制御
- 複数のトランザクションを同時に実行しても、データの矛盾が発生しないように処理すること
同時実行制御の方式 †
- 単版同時実行制御
- ロック
- 多版同時実行制御
- 専有ロック中のデータに対して、他のトランザクションによる参照を許可する(更新前のデータが参照される)
- 時刻印アルゴリズム
- トランザクションの発生時刻とデータの読込み時刻、書込み時刻を比較して参照・更新の可否を判断する
- 参照可能な条件
- トランザクションの発生時刻 >= データの書込み時刻 の場合
- 更新可能な条件
- トランザクションの発生時刻 >= データの読込み時刻/書込み時刻 の場合
ロックの方式 †
- 専有ロック(排他ロック、占有ロック)
- データを更新する際にロックすることで、他のトランザクションによる参照・更新を不許可にする
- 共有ロック(共用ロック)
- データを参照する際にロックすることで、他のトランザクションによる更新を不許可にする(参照は許可する)
WALプロトコル †
- トランザクションがログを安定記憶に書き出すタイミングについて取り決めたもの
- 「Write Ahead Log」(先にログを書け)
- 実際の操作に先行してログの書き出しを求めている
- この取り決めを採用することで、システム障害発生時にCOMMIT済でデータベースに書き込まれていない更新データの復旧が可能