トランザクション処理
トランザクション処理とは、データベース更新時に切り離すことができない一連の処理。
ACID特性
排他制御
排他制御は、テータベース更新時にデータの不整合が発生しないように、データの更新中はアクセスをロック(制御)して、別のトランザクションから更新できないように制御すること。
共有ロック
トランザクションがテータを参照する前にかけるロック。
共有ロック中のデータに対して、他のトランザクションから参照できるが、更新できない。
専有ロック
トランザクションがデータを更新する前にかけるロック。
専有ロック中のデータに対して、他のトランザクションからは参照も更新もできない。
ロックの粒度
ロックの粒度とは、ロックを掛ける範囲の大きさ。
〇ロックの粒度を細かくすると
ロックを掛ける範囲が狭いほどロックが重複する確率が低くなるため、同時に実行されるトランザクションが増え競合が起こりにくくなる。
しかし、メモリ使用領域が多くなる。
〇ロックの粒度を大きくすると
ロックを掛ける範囲が広がるとロックが重複する確率が高くなり待ちが多くなるため、同時に実行できるトランザクションが減り全体のスループットが低下する。
しかし、メモリ使用領域が少なくすむ。
※スループット
コンピュータやネットワーク機器が単位時間あたりに処理できるデータ量。
デッドロック
デッドロックは、複数のトランザクションが、互いに相手が専有ロックしている資源を要求して待ち状態となり、実行できなくなる状態。お互いのロック解放待ち。
2相コミットメント
2相コミットメントは、コミットするか、ロールバックするかのどちらか。
分散型データベースシステムにおいて、一連のトランザクション処理を行う複数サイトに更新処理が確定可能かどうかを問い合わせた後、全てのサイトが確定であれば、更新処理を確定する方式。
更新を確定する前に中間状態を設定して、一連の処理が障害なく更新できた場合は、全ての結果を確定(コミット)する。もし、障害が発生した場合は、その処理を強制終了(アボート)して、全ての結果を無効として更新前の状態に戻す(ロールバック)。