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

ACID(原子性・一貫性・独立性・耐久性)を身近な例で理解し、コミット/ロールバック・排他制御・デッドロック・リカバリまで整理。

編集・検証: ITパスポートスタディ編集部 公式情報: IPA ITパスポート試験公式ページ 制作・検証方針

銀行振込のように「途中で止まったら困る」処理を、安全にまとめて扱う仕組みがトランザクションです。データベースの信頼性を支えるACID特性を、身近な例で正確に押さえましょう。

小夜川 ほのか(普段) 小夜川 ほのか

トランザクションって、銀行のATMで聞いたことありますぅ〜。
難しそうな響きなのぉ。

紫垣 こはる 先生(笑顔) 紫垣 こはる 先生

言葉は難しそうだけど、中身はシンプルよ。
トランザクションは、ひとまとまりで扱いたい処理の束のこと。
たとえばA口座から1万円引いて、B口座に1万円足す。
この2つは必ずセットでしょう?

星見 めい(びっくり) 星見 めい

あー、片方だけ成功したらヤバいやつじゃん。
1万円消えるか、勝手に増えるか。

紫垣 こはる 先生(普段) 紫垣 こはる 先生

そう。
だから『両方成功、または両方なかったことにする』。
この全か無かの考え方が、これから話すACIDの出発点なのよ。

蜂谷 まこと(普段) 蜂谷 まこと

その4つの性質をまとめた言葉がACIDです。
補足すると、Atomicity・Consistency・Isolation・Durabilityの頭文字をつなげた語呂で、英語のacid(酸)と同じ綴りなので覚えやすいですね。

星見 めい(笑い) 星見 めい

酸っぱいACIDね。
テストで綴りごと覚えとけば最強じゃん。

蜂谷 まこと(普段) 蜂谷 まこと

1つ目が原子性。
さっきの振込のように、これ以上分けられない一単位として扱う性質です。

小夜川 ほのか(笑顔) 小夜川 ほのか

原子ってそれ以上割れないってことですかぁ? だから『全部か、ゼロか』なんですねぇ。

紫垣 こはる 先生(笑顔) 紫垣 こはる 先生

ふふ、いい連想ね。
2つ目は一貫性。
たとえば『残高はマイナスにならない』というルールがあるなら、トランザクション後もそれが守られているの。

蜂谷 まこと(普段) 蜂谷 まこと

3つ目が独立性です。
複数の処理が並行して走っても、お互いに途中経過が見えず、1つずつ順番に実行したのと同じ結果になります。

星見 めい(びっくり) 星見 めい

えっ、同時に動いてるのに混ざらないってこと? どうやって分けてんの?

蜂谷 まこと(普段) 蜂谷 まこと

そこで使うのが排他制御です。
具体的にはロックをかけて、誰かが使っている間は他を待たせます。

紫垣 こはる 先生(普段) 紫垣 こはる 先生

最後の4つ目が耐久性。
一度『確定』した変更は、停電やシステム障害が起きても失われないのよ。

小夜川 ほのか(普段) 小夜川 ほのか

あの…『確定』って何で決まるんですかぁ? 途中でやめることもあるんですよねぇ?

蜂谷 まこと(普段) 蜂谷 まこと

いい質問です。
成功して変更を確定させる操作がコミット、失敗して変更をすべて取り消し、開始前の状態に戻す操作がロールバックです。
対で覚えるのがコツですね。

星見 めい(普段) 星見 めい

コミットが『決定!』で、ロールバックが『なかったことに』ね。
ところでさ、ロックって待たせ合ったまま止まったりしないの?

紫垣 こはる 先生(普段) 紫垣 こはる 先生

鋭いわね。
それがデッドロック。
お互いが相手の鍵待ちで動けなくなる状態よ。

星見 めい(びっくり) 星見 めい

マジか、にらみ合って一歩も動かないやつじゃん。
どうやって解決すんの?

蜂谷 まこと(普段) 蜂谷 まこと

多くの場合、データベース管理システムが自動で検出して、片方の処理を強制的にロールバックさせ、もう片方を進めます。
設計側ではロックを取る順番を揃えることで、起きにくくできます。

紫垣 こはる 先生(普段) 紫垣 こはる 先生

障害が起きたときの立て直しも大事よ。
変更の履歴を記録したログと、ある時点の状態を丸ごと保存したバックアップを組み合わせて元に戻すの。
これをリカバリというわ。

小夜川 ほのか(笑顔) 小夜川 ほのか

ログがあれば『どこまで進んでたか』が分かるから安心ですぅ〜。

蜂谷 まこと(普段) 蜂谷 まこと

発展として、複数のデータベースにまたがる処理では2相コミットで整合性を保ちます。
一方、NoSQLなどでは厳密さより可用性を優先するBASEという考え方もあります。

星見 めい(笑い) 星見 めい

ACIDが『きっちり派』で、BASEが『まあ最終的に合えばいい派』ね。
酸と塩基で対になってるのウケる。

紫垣 こはる 先生(笑顔) 紫垣 こはる 先生

ふふ、その対比は覚えやすいわね。
整理すると、トランザクションは全か無かのまとまり、その品質保証がACID、確定はコミット・取消はロールバック、同時実行の交通整理が排他制御、その事故がデッドロック。
ここまで押さえれば試験は怖くないわよ。

確認クイズ

トランザクションのACID特性のうち、「処理は全て実行されるか、全く実行されないかのどちらかである」性質を表すものはどれか。

  1. Atomicity (原子性)
  2. Consistency (一貫性)
  3. Isolation (独立性)
  4. Durability (耐久性)
こたえを見る

正解: 1. Atomicity (原子性)

正解はAtomicity (原子性)。トランザクションを分割不可能な一単位とみなし、全成功か全失敗のみを認める性質です。Consistency(一貫性)は処理前後でデータの整合性が崩れないこと、Isolation(独立性)は並行する処理が互いに干渉しないこと、Durability(耐久性)はコミット後の結果が障害でも失われないことで、いずれも「全か無か」とは異なります。

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。