pulpul 日本の試験

データベーススペシャリスト 概念書 · データベース

トランザクション処理

要点と定義

トランザクションは、ひとまとまりとして扱うデータベース処理です。ACIDの四特性は、原子性(一部だけでなく全体として完了または取消し)、一貫性(定義された整合性を保つ)、独立性(同時実行による干渉を制御する)、耐久性(確定した変更を保持する)です。一貫性は処理前後の整合性、独立性は同時実行の扱いを表します。

隔離性水準は、同時実行中にどの読み取り現象を防ぐかを定めます。ダーティリードは他の処理がまだ確定していない更新を読むこと、反復不能読込みは同じ行を読み直したときに値が変わることです。過去の出題で扱った補足として、READ COMMITTEDはダーティリードを防ぎますが、反復不能読込みは起こり得ます。

過去の出題で扱った補足として、直列化可能性は、並行実行の結果が何らかの順序で逐次実行した結果と等価になる性質です。楽観的制御法は、処理中に対象データをロックせず、確定前の検証で更新競合を確認します。競合があれば確定を避け、再実行などで対処します。

過去の出題で扱った補足として、セーブポイントはトランザクション内の戻り位置です。その位置より後の変更を取り消し、処理を続けられます。

更新ログの更新前情報は変更を取り消すロールバックに、更新後情報は変更を再適用するロールフォワードに使います。媒体障害ではバックアップからデータベースを復元し、バックアップ取得後のログを適用して回復を図ります。

過去の出題で扱った補足として、分散トランザクションの二相コミットでは、参加サイトが準備できるか応答した後、主サイトが全体のコミットまたはロールバックを決めます。決定通知が届かなければ、参加サイトが結果を判断できず待ち状態になることがあります。

適用条件と例

隔離性水準は、SQLの指定と利用するデータベースの動作を確認して読みます。例えば、在庫を読む取引が同じ行を二度参照する間に、別の取引が確定した更新を行えば、READ COMMITTEDでは二度目の値が変わることがあります。未確定値を読めるかどうかは別の確認点です。

振替処理が一方の口座を減額し、他方を加算するなら、途中で異常終了したときに全体を取り消す必要があります。これは原子性に関係します。処理後も残高の制約を満たすことは一貫性、確定済みの変更を障害後も保持することは耐久性の観点です。

楽観的制御法は、競合が頻発しないと見込め、処理中のロックによる待ちを避けたい場合に適します。例えば、編集時に読んだ版と保存時点の版を比べ、別の更新が先に確定していれば上書きを避けて再確認します。ロックを省く場合も、確定前の競合検証が必要です。

ログの用途は回復の方向で区別します。誤更新を取り消すには更新前情報を使い、バックアップ復元後に確定済み更新を反映するには更新後情報を使います。媒体障害ではバックアップを戻してからログを適用します。必要なログが残っていない範囲は、その情報だけでは再現できません。

二相コミットでは、参加サイトの準備応答だけでは最終確定ではありません。全体の決定通知を受け取ってから各サイトが同じ結果に進みます。通知が途切れたサイトは、独自に確定せず、決定を確認できるまで待つことがあります。

この節の続き

ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。

アプリでこの節を読む