3.4トランザクション管理

3.4トランザクション管理

データベーススペシャリストのトランザクション管理の基礎について学習した内容をまとめ。

トランザクション(transaction)

がACID特性をほじしつつ同時実行できるようにする機能が、トランザクション管理機能である。トランザクション管理機能には、同時実行制御(排他制御)機能、障害回復機能、コミット制御機能(分散データベース)がある。

トランザクションのACID特性

トランザクションとは、

データベースの更新などを含む一つの作業単位で、コミットまたはロールバックを持って完結する。集中型データベースや分散データベースシステムにおいて、トランザクションは原子性、一貫性、隔離性、耐久性といったACID特性を持たなければならない。ACID特性を持つことでデータベースの一貫性が保たれる。

特性内容
原子性
(Atomicity)
トランザクションが終了したとき、全ての処理が完了しているか、全く行われていないかどちらかの状態。
対応機能:障害回復機能、2相/3層コミット制御
一貫性
(Consistency)
トランザクション処理の終了状態にかかわらず、データベースは一貫性を保っていること。
対応機能:同時実行制御、排他制御
隔離性
(Isolation)
複数のトランザクションを同時に実行したときに、直接可能であること。すなわち直列に実行したのと同じ結果であること。更新途中のトランザクションの処理結果がほかのトランザクションに見えないこと。
対応機能:同時実行制御、排他制御
耐久性
(Durability)
トランザクションが完了すると、その後の障害などによってデータベースの内容が変化しないこと。
対応機能:2相/3層コミット制御
ACID特性

並列実行時の問題点

ロストアップデート(lost update:更新の喪失)

同時実行制御を行わずにT1、T2を実行すると、T1かT2のどちらかの更新結果が上書きされ、正しい結果が得られなくなる。更新結果を失われる。

整合性制約の侵害

同時実行制御を行わずT1、T2を並列実行すると、整合性(インテグリティ)制約が侵害される場合がある。

コミットされてない依存性の問題

並列実行する一方のトランザクションが、もう一方のトランザクションが更新した部分的な結果を読み込む場合がある。ダーティリードやノンリピータブルリード。

不整合分析の問題(inconsistent analisis)

並行実行するスケジュールにおいて、直接化可能性ではなないが、ダーティリードやノンリピータブルリード、ファントムが起きる条件でもないのにも関わらず、データベースに不整合な状態が起きることがある。

同時実行制御(concurrency control)

複数の並列に実行されるトランザクションが同時にデータベースへアクセスするとき、互いに干渉しないで、あたかも直列的に実行されたかのように制御すること。並列性制御、一貫性制御。同時実行制御の目的は、データベースの一貫性を保ちながら複数のトランザクションを並列的に処理することによって、データベースシステムのスループットを最大にする。

直列化可能性(serializability)

並列実行されるトランザクションが、それらのトランザクションをある順序で直列につないで実行した場合と同じ結果を持つ露機、並列トランザクションのスケジュールは直列化可能スケジュール(serializable schedule)という。

一貫性制御

トランザクション処理の終了状態や複数トランザクションのデータベースに対する同時アクセスに関わらず、データベースの内容に矛盾が生じないこと。複数のトランザクションが同時にデータベースを更新した結果、一方は更新されたが、もう一方は更新されなかった。という状態があってはならない。

分散データベース環境で1相コミットを行った場合や更新喪失等の問題が発生した場合は一貫性が失われる。

これを解決するのが同時実行制御。

同時実行制御を行うことによって、データベースの内容の一貫性を保つことができる。一貫性制御(consistency control)。

コミット(commit)

トランザクションが行ったデータベースに対する更新を確定すること。反映され、更新内容はほかのトランザクションから見ることができる。

ロールバック(rollback)

トランザクションが行ったデータベースに対する更新を破棄。変更前の状態へ戻すこと。

スケジュールの図式表示方式と直列化可能性判定グラフ

スケジュールの図式表示方式

二つのトランザクションT1、T2の並列実行スケジュールが直列化可能かどうかを判定。

直列化可能性判定グラフ

ロック(lock)を用いた並列トランザクションの直列化可能性は、直列化可能性判定グラフを用いて判定することができる。

同時実行制御の方式

ロック法、時刻印方式、楽観的方式、トランザクションスケジューリング、多バージョン同時実行制御。

ロック制御(locking control)

排他制御によって同時実行制御を行う場合に用いられる法オフ。専有ロック、共有ロック。2相ロック方式。

時刻印制御(timestamp concurrency control)

トランザクションの発生した時刻印(タイムスタンプ)と読み込み対象となるデータの最新時刻印を比較して、読み書きを行う方法。ロックをかけないので、ロックによる待ちやデッドロックは発生しない。時刻印アルゴリズム。

楽観的制御(optimistic concurrency control)

読み取りだけのトランザクションが多く、書き込みがある場合はトランザクション間に共通データが少ないときに有効な方式。ロックをかけないのでロック待ちやデッドロックは発生しない。

トランザクションスケジューリング(transaction scheduleing)

スケジューラを用いて、これらのトランザクションの実行順序を直列化可能なスケジュールに変更する方式。

多バージョン同時実行制御(MVCC:Multi-Version Concurrency Control)

トランザクションがデータベースを更新するとき、DBMSはロールバックに備えて更新前データを採取する。この更新前データを用いることによって、トランザクションの並行性を向上させる。多バージョン同時実行制御(MVCC:Multi-Version Concurrency Control)。

カーソル定義でINSENSITIVEが指定されると、元の表のコピーに対してアクセスすることになる。