教科書一覧へ

トランザクションの基礎と並行制御

低頻約 13 分トランザクション処理

概要

本ユニットでは、データベース更新の基本単位であるトランザクションと、その正しさを保証する ACID 特性、さらに複数処理を同時に動かしたときに起こるデッドロックや、複数 DB をまたぐ更新を整合させる2相コミットメントを学びます。データの一貫性を守る土台となる重要分野です。

用語4

トランザクション

分けられない一連の処理を一つのまとまりとして扱うデータベースの更新単位。

トランザクションとは、複数の処理を「全部成功」か「全部なかったことにする」かのどちらかにする、ひとまとまりの処理単位です。例えば銀行振込では「A口座から引く」「B口座へ足す」の両方が必ずそろって完了しなければなりません。 途中で失敗したら、それまでの更新をすべて取り消して元に戻します(ロールバック)。逆にすべて成功したら確定します(コミット)。 試験では、片方だけ実行されてデータが矛盾する事態を防ぐ仕組みとして問われます。「全部やるか、全部やらないか」という性質を押さえることが重要です。

たとえネット通販の注文で「代金の支払い」と「商品の発送手配」がセットになっているようなもの。どちらか一方だけ成立することはなく、両方そろって初めて取引が成立します。

記憶フックトランザクションといえば全部やるか全部やらないかの処理単位

ACID特性

トランザクションが信頼性を保つために満たすべき4つの性質。

ACID特性は、トランザクションが守るべき4つの性質の頭文字をとったものです。原子性(Atomicity:全部実行か全部取消)、一貫性(Consistency:データの矛盾がない)、独立性(Isolation:同時実行しても互いに干渉しない)、耐久性(Durability:確定後は障害でも消えない)を指します。 この4つがそろうことで、トランザクションは安全に処理されます。 試験では各文字が何を表すかが頻出です。特に「原子性=全部か無か」「独立性=並行実行でも結果が崩れない」をきちんと区別できることがポイントです。

たとえ料理の作り置きルールに例えると、「作りかけは出さない(原子性)」「レシピ通り(一貫性)」「複数人が同時に作っても混ざらない(独立性)」「冷蔵庫に入れたら腐らせない(耐久性)」という4つの約束事です。

記憶フックACID特性といえば原子性・一貫性・独立性・耐久性の4つ

デッドロック

複数の処理が互いの資源解放を待ち続け、永久に進めなくなる状態。

デッドロックは、複数のトランザクションが互いに相手の使っている資源(データ)を待ち合い、どちらも先に進めなくなる膠着状態です。Aさんがデータ1を確保したまま2を待ち、Bさんがデータ2を確保したまま1を待つと、お互い永遠に解放されません。 同時実行(並行制御)で資源にロックをかける際に起こります。 試験では、二者が互いに待ち合う「循環した待ち」が原因である点が問われます。対策として、片方の処理を強制終了させて巻き戻す方法などがあることも押さえましょう。

たとえ狭い一本道で2台の車が正面で向き合い、互いに「相手が先に下がれ」と譲らず、どちらも動けなくなった状態に似ています。

記憶フックデッドロックといえば互いに資源を待ち合って動けない状態

資源Bを待つ

処理2が確保中

資源Aを待つ

処理1が確保中

処理1

資源B

処理2

資源A

2相コミットメント

複数DBにまたがる更新を全体で確定/取消し整合させる2段階の手順。

2相コミットメント(2相コミット)は、複数のデータベースにまたがるトランザクションを、全体として確実に確定させるための手順です。第1相で各DBに「コミットできるか」を問い合わせ(準備)、全員が「可能」と答えたら第2相で一斉に確定(コミット)します。 一つでも「不可能」があれば全体を取り消します。 試験では、分散環境で複数DBの整合をとる仕組みである点が問われます。準備フェーズと確定フェーズの2段階で進める点を押さえましょう。

たとえ複数の出席者で日程を決めるとき、まず全員に「この日で大丈夫?」と確認し、全員OKなら正式に「では確定」と通知する流れに似ています。一人でも不可なら全員分を白紙に戻します。

記憶フック2相コミットメントといえば準備と確定の2段階で分散更新を整合

第1相:準備可否を確認

第1相:準備可否を確認

準備OK

準備OK

第2相:全員へ確定指示

調整役

DB1

DB2

全DBコミット

まとめ

要点

  • トランザクションは「全部成功(コミット)か全部取消(ロールバック)か」を保証するデータベースの更新単位である。
  • ACID特性は原子性(Atomicity)・一貫性(Consistency)・独立性(Isolation)・耐久性(Durability)の4つの性質で、各文字の意味が頻出。
  • デッドロックは複数トランザクションが互いの資源を待ち合う循環で発生し、片方を強制終了して巻き戻すなどで解消する。
  • 2相コミットメントは複数DBにまたがる更新を、準備フェーズと確定フェーズの2段階で整合させる仕組みである。
  • 並行実行や分散環境でもデータの一貫性を崩さないことが、これら全ての目的である。

記憶フック一覧

  • トランザクション: トランザクションといえば全部やるか全部やらないかの処理単位
  • ACID特性: ACID特性といえば原子性・一貫性・独立性・耐久性の4つ
  • デッドロック: デッドロックといえば互いに資源を待ち合って動けない状態
  • 2相コミットメント: 2相コミットメントといえば準備と確定の2段階で分散更新を整合

関連の過去問演習は今後のアップデートで追加予定です。