トランザクション管理と並行性制御
トランザクション管理と並行性制御により、データベースは多数の並行トランザクションを正しく実行し、障害から回復することができます。これにより、原子性(Atomicity)、一貫性(Consistency)、独立性(Isolation)、永続性(Durability)(ACID)の特性が保証されます。
Definition
トランザクションとは、単一の論理単位として実行される一連のデータベース操作であり、原子性があり、一貫性を保ち、並行トランザクションから隔離され、コミットされると永続性を持つものです。トランザクション管理とは、並行性と障害下でこれらの特性を強制するメカニズムの集合を指します。
Scope
この分野では、作業単位としてのトランザクションと、並行かつ障害が発生しやすい実行を正しく行うためのメカニズムについて扱います。具体的には、ACID特性、並行性の正しさの基準としての直列化可能性、それを強制するロック、タイムスタンプ、多版プロトコル、一貫性を性能と引き換えにする弱い分離レベル、クラッシュ時に原子性と永続性を保証するロギングと回復技術が含まれます。複数のサイトにわたる分散コミットは除外され、これは分散並列データベースの分野で扱われます。
Sub-topics
Core questions
- ACID特性は何を保証し、なぜそれらが必要とされるのでしょうか?
- 並行スケジュールを正しく、すなわち直列化可能にするものは何でしょうか?
- ロック、タイムスタンプ、多版プロトコルはどのように直列化可能性を強制するのでしょうか?
- ロギングと回復は、クラッシュ後にどのように一貫性のある状態を復元するのでしょうか?
- 弱い分離レベルは、どのように一貫性を並行性と引き換えにするのでしょうか?
Key concepts
- トランザクションとコミット/アボート
- ACID特性
- 直列化可能性と先行グラフ
- 二相ロック
- タイムスタンプ順序付け
- 多版並行性制御
- デッドロック検出と防止
- 先行書き込みログ
- 分離レベル
Key theories
- ACID特性
- 原子性(all-or-nothing実行)、一貫性(整合性制約の維持)、独立性(並行トランザクションが単独で実行されているように見えること)、永続性(コミットされた効果が障害後も存続すること)が一体となって、正しいトランザクション動作を定義します。
- 直列化可能性
- 並行スケジュールは、ある直列実行と等価であれば正しいとされます。先行(直列化)グラフを介してテストされる衝突直列化可能性は、並行性制御プロトコルが強制する実用的な基準です。
- 並行性制御と回復
- ロック、タイムスタンプ順序付け、多版方式は非直列化可能なインターリーブを防ぎ、先行書き込みログと回復アルゴリズムは原子性と永続性を保証します。これらは正しいトランザクション処理の二つの側面です。
Clinical relevance
トランザクション管理は、データベースが金銭や記録に対して信頼できるものである理由です。これにより、銀行振込が一方の口座から引き落とされ、もう一方の口座に入金されないということが決して起こらないこと、航空会社が並行する要求の下で座席を二重予約することが決してないこと、そしてコミットされたデータがクラッシュ後も存続することが保証され、すべての信頼性の高いトランザクションシステムの基盤となっています。
History
トランザクションの概念とACID特性は、1970年代にIBMのSystem Rで形式化されました。Eswaranらは(1976年)一貫性とロックの概念を確立し、Jim Grayはトランザクションと回復を定義し、Bernstein、Hadzilacos、Goodman(1987年)は直列化可能性理論を体系化しました。Grayのトランザクション処理への貢献は、チューリング賞を受賞するに至りました。
Key figures
- Jim Gray
- Philip Bernstein
- Andreas Reuter
Related topics
Seminal works
- gray1992
- bernstein1987
- eswaran1976
Frequently asked questions
- トランザクションのスケジュールが直列化可能であるとはどういう意味ですか?
- 並行スケジュールが直列化可能であるとは、その全体的な効果が、同じトランザクションをある順序で一つずつ実行した場合と全く同じであることを意味します。直列化可能性は、正しさの黄金基準です。性能のためにトランザクションがインターリーブされても、結果はあたかも直列に実行されたかのようになるため、どのトランザクションも一貫性のない中間状態を見ることはありません。
- アノマリーを引き起こす可能性があるのに、なぜ弱い分離レベルが許容されるのですか?
- 完全な直列化可能性を強制すると、ロック競合やアボートにおいて性能コストが発生します。多くのアプリケーションは、より高い並行性を得るために特定のアノマリーを許容できるため、SQL標準では、開発者がスループットのために意図的に一部の独立性を犠牲にすることを可能にする弱い分離レベル(リードコミット、リピータブルリードなど)を定義しています。