本文へスキップ

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

低頻約 35 分4 用語過去問 14 題

この単元の目標

  • コミット と ロールバック の違いを、処理が成功した場合と失敗した場合に分けて説明できる。
  • ACID特性 の 4 つの性質を、それぞれが何を守るかで区別できる。
  • 同じデータへの同時アクセスで起こる矛盾を防ぐ 排他制御 と、ロックの待ち合いで起こる デッドロック を区別できる。
  • 2相コミットメント が複数のデータベースの更新をどうそろえるかを、段階の順に説明できる。
用語総表(4 語)
用語ひとことで扱う場面手がかりの語
トランザクション複数の更新を、すべて反映するか一つも反映しないかで終わらせる処理の単位データベースへの一連の更新コミット、ロールバック、ログ
ACID特性トランザクションが満たすべき 4 つの性質の頭文字トランザクションの正しさの基準原子性、一貫性、独立性、耐久性
デッドロック資源を持ったまま互いに相手の資源を待ち、どの処理も進めなくなる状態ロックを使う複数処理の同時実行待ち合いの輪
2相コミットメント複数のデータベースにまたがる更新を、準備と確定の 2 段階でそろえる手順複数のデータベースにまたがる更新調整役、準備、確定

用語

トランザクション は、関連する複数の更新処理をひとまとまりにし、すべてを反映するか一つも反映しないかのどちらかで終わらせる処理の単位である。

コミットロールバック
行うときまとめた処理がすべて正常に終わったときまとめた処理の途中で失敗したとき
更新の扱い更新を確定し、以後も残す更新を取り消し、開始前の状態に戻す

まとめた処理がすべて正常に終わったら更新を確定させる操作を コミット、途中で失敗したら更新を取り消して開始前の状態に戻す操作を ロールバック という。取り消しに備えて、DBMS は更新の履歴を ログ というファイルに記録している。複数の利用者が同じデータに同時にアクセスすると結果に矛盾が出ることがあるため、使用中のデータに ロック をかけて他の処理を待たせる 排他制御 を行う。

たとえ航空券とホテルをセットでしか取らないパック旅行の予約に似ている。ホテルが満室なら航空券も取らず、両方そろって初めて予約が成立する。

覚え方英語の transaction は「取引」の意味。取引は品物の受け渡しと代金の支払いがそろって初めて成り立つ、と語の由来で思い出す。

出題のポイント

  • 出題コミット は、まとめた処理がすべて正常に終わった時点で更新を確定させる操作である。失敗時に開始前の状態へ戻す ロールバック とは逆の働きをする。
  • 出題排他制御 は、複数の処理が同じデータに同時にアクセスして不整合が出るのを防ぐ仕組みで、使用中のデータにロックをかけ、使い終わるまで他の処理を待たせて実現する。
  • 出題ロックをかけずに並行して更新し、二つの処理が同じ値を読み込んでから順に書き込むと、後で書き込んだ側の結果だけが残り、先の更新は失われる。

この用語の過去問 3 題 トランザクション

ACID特性 は、トランザクションが正しく処理されるために満たすべき 4 つの性質を、英語名の頭文字で表したものである。

頭文字性質守る内容
A (Atomicity)原子性更新を全部反映するか、一つも反映しないか
C (Consistency)一貫性処理の前後でデータが決められた条件を満たす
I (Isolation)独立性同時に動く処理が互いの途中結果に左右されない
D (Durability)耐久性コミットした結果は障害が起きても失われない

原子性 は更新が全部反映されるか一つも反映されないか、一貫性 は処理の前後でデータが決められた条件 (例えば数量が負の値にならない) を満たし続けることを指す。独立性 は同時に動く複数のトランザクションが互いの途中結果に左右されないこと、耐久性 はコミットした結果が後で障害が起きても失われないことを指す。

覚え方A・C・I・D を続けると英語の acid (アシッド) になる。先頭の Atomicity は atom (それ以上分けられない原子) から来ており、一連の更新を分けて一部だけ残すことはしない、と結び付ける。

出題のポイント

  • 出題原子性 は、一連の更新を全部反映するか一つも反映しないかにそろえる性質で、成功時に確定し失敗時に元へ戻すトランザクションの動きそのものに当たる。
  • 出題独立性 は、同時に動く処理が互いの途中結果に左右されない性質で、使用中のデータにロックをかけ、他の処理をその処理の終了まで待たせる排他制御によって保たれる。
  • 混同注意原子性 はコミット前の中途半端な状態を残さない性質、耐久性 はコミット後の結果を障害から守る性質であり、コミットの前と後のどちらを守るかで分かれる。

この用語の過去問 2 題 ACID特性

デッドロック は、複数の処理がそれぞれ資源を確保したまま相手が持つ資源の解放を待ち合い、どの処理も先へ進めなくなる状態である。

  1. 処理1が資源Xをロック
  2. 処理2が資源Yをロック
  3. 処理1が資源Yの解放を待つ
  4. 処理2が資源Xの解放を待つ

処理2もXを求めて待つ。待ちが輪になり、両方とも止まる。

4 / 4

例えば処理1が資源Xを、処理2が資源Yをロックした後、処理1がYを、処理2がXを求めると、互いに相手のロック解除を待つ輪ができる。この待ち合いはどちらかが譲らない限り解けないため、DBMS は一方の処理をロールバックしてロックを解放させるなどして解消する。

たとえ二人が箸を 1 本ずつ持ったまま、相手の 1 本が空くのを待って、どちらも食べ始められない様子に似ている。

覚え方dead (動かない) と lock (鍵) の組み合わせ。互いに鍵を掛け合ったまま固まる、と字面で覚える。

出題のポイント

  • 出題デッドロック の核心は、各処理が資源を持ったまま別の資源を待ち、その待ちが互いに輪になっている点にある。
  • 出題ロックは、データを読み込む前にかけ、結果を書き込み終えてから外す。読み込みから書き込みまでの間に他の処理が入り込まないようにするためである。
  • 混同注意排他制御 は同時アクセスで起こる矛盾を防ぐための仕組みであり、デッドロック はロックを使う処理どうしの待ち合いで起こりうる停止状態である。目的の仕組みか、生じる問題かで分かれる。

この用語の過去問 3 題 デッドロック

2相コミットメント は、複数のデータベースにまたがるトランザクションを全体で確定するか全体で取り消すかにそろえるため、準備と確定の 2 段階でコミットを進める手順である。

  1. 調整役が各DBに準備を依頼
  2. 各DBが準備して可否を回答
  3. 調整役が全員の回答を確認
  4. 全DBに確定か取消を指示

第2相: 全員が可なら確定を、一つでも否があれば取消を全員に指示する。

4 / 4

全体を取りまとめる 調整役 は、第1相で各データベースに確定の準備ができたかを問い合わせ、各データベースは更新をいつでも確定できる状態にしてから可否を返す。全員が可と答えたときだけ第2相で確定を指示し、一つでも否があれば全員にロールバックを指示する。これにより、ある拠点では確定し別の拠点では取り消された、という食い違いを防ぐ。

たとえ共同購入で、参加者全員から支払えるという返事がそろってから一斉に代金を引き落とし、一人でも支払えなければ誰からも引き落とさないやり方に似ている。

覚え方「相」は phase (段階) の訳語。1 相目で聞き、2 相目で決める、と数字と動作を対にして覚える。

出題のポイント

  • 混同注意1 つのデータベースで完結する更新はそのデータベースのコミット 1 回で確定するが、2相コミットメント は確定の前に、参加する全データベースの準備完了を確かめる段階を挟む。
  • 混同注意第1相で可と答えたデータベースも、その時点ではまだ確定していない。第2相で取消の指示を受ければ、そのデータベースもロールバックする。

この用語の過去問 1 題 2相コミットメント

「トランザクション」と「2相コミットメント」の違い

観点トランザクション2相コミットメント
何かひとまとまりで扱う処理の単位複数のデータベースにまたがる単位を確定させる手順
決め手確定の進め方1 つのデータベースで完結するなら、コミット 1 回で確定する全データベースの準備完了を確かめてから、一斉に確定する
失敗したときロールバックで開始前の状態に戻す一つでも否があれば、全データベースをロールバックさせる

要点

  • トランザクション は一連の更新をすべて反映するか一つも反映しないかにそろえる単位で、成功時は コミット、失敗時は ロールバック で開始前に戻す。
  • 複数の処理が同じデータに同時にアクセスすると矛盾が出ることがあり (例えば後から書き込んだ結果で先の更新が消える)、ロックで他の処理を待たせる 排他制御 で防ぐ。
  • ACID特性 は原子性・一貫性・独立性・耐久性の 4 つで、例えば独立性は同時に動く処理が互いの途中結果に左右されないことを指す。
  • デッドロック は資源を持ったまま相手の資源を待つ輪ができた状態で、一方をロールバックしてロックを解放させるなどして解消する。
  • 2相コミットメント では、調整役が全データベースから準備完了の返事を集めてから、確定か取消かを一斉に指示する。

確認問題

この単元の過去問から 5 題

確認問題を解く

この分野の過去問をすべて見る