停電で全部消えた (永続性)
永続性 (durability) とは、コミット済みトランザクションによる変更がシステム障害の発生後も失われずに保持される性質であり、多くの DBMS では変更操作のログを永続ストレージへ先行して同期書き込みする Write-Ahead Logging (WAL) によって実現される。
事故 — 停電で 8 時間分の作業が消えた
終業間際、スタッフは Excel を保存し忘れたまま画面を開きっぱなしにして退勤した。 深夜 2 時、雷雨で停電。翌朝出勤して Excel を開くと、当日の受注データがまるごと消えていた。最終保存は朝 9 時。以降 17 時までの 8 時間分の作業が全滅。 自動回復ファイルにも 15 時までの断片しか残っていなかった。
原因 — Excel は明示保存後にしか確定しない
Excel の「変更」はメモリ上にしかない。Ctrl+S を押した瞬間、あるいは自動保存機能が発火した瞬間にしかディスクに書かれない。電源が落ちるとメモリの内容は消える。自動回復は数分単位の抜けを救うが確実ではない。
- OPExcel を開く / 保存済み状態
- OP9:00 手動で保存 (最終保存)
- OP9:00〜17:00 受注入力 (メモリ上のみ)8 時間分の作業が「メモリ」にしか無い状態
- EVENT深夜 2 時 停電メモリ内容は全て消える
- WAL (Write-Ahead Logging): データ本体ファイルより 先に「変更ログ」をディスクに書き込む方式
- REDO ログ: コミット済みだがデータ本体に反映が間に合わなかった変更を、 クラッシュ後に 再現 するための操作記録
- UNDO ログ: 未コミットの変更を 取り消す ための操作記録
- ロールフォワード (roll forward): REDO ログを再生して、 コミット済みの状態まで前に進める処理
- ロールバック (roll back): UNDO ログを使って、 未コミット変更を取り消す処理 (原子性の実装にも使う)
- クラッシュリカバリ: DBMS 起動時にログを読み、 ロールフォワード + ロールバックで整合性を復元する処理
解決策 — WAL とコミット時の同期書き込み
RDB の COMMIT は「ログを永続ストレージに書き終わってから」アプリケーションに成功を返す。データ本体ファイルより先に、変更操作をログに記録する ことで、ログが確実にディスクに残っていれば後から状態を再現できる。これが WAL の原理。
COMMIT の裏では、OS のバッファではなく 物理ディスクへの書き込み完了まで DBMS が待つ (「同期書き込み」)。これで COMMIT 応答が返った時点で、 変更は電源喪失があっても失われない状態になっている。
- BEGINBEGIN
- OPINSERT / UPDATE / ...
- COMMITCOMMIT (同期書き込み待ち)WAL エントリが物理ディスクに書き終わった状態。この瞬間から永続化保証
- EVENT停電データ本体ファイルの一部がまだメモリでも問題ない
- OP復電 → ロールフォワードでコミット済み状態を復元
クラッシュリカバリ — ロールフォワード + ロールバック
DBMS 起動時に クラッシュリカバリ フェーズを実行する:
- ロールフォワード: REDO ログを再生し、コミット済みだがデータファイルに 反映が間に合っていなかった変更を再適用する
- ロールバック: UNDO ログを使って、未コミットのまま中断した変更を取り消す
この 2 段階で「COMMIT 応答済みの変更は残り、未 COMMIT の変更は消える」が保証される。
境界事例
- 同期書き込みを無効化する高速化オプション: PostgreSQL の
synchronous_commit = offなど。スループットは上がるが、電源喪失で数百 ms 分の コミットが失われる可能性がある。データが消えても再生できる用途 (キャッシュ、ログ収集) 以外では使わない - グループコミット / ログのバッファリング: 複数トランザクションの WAL を まとめて 1 回で書き込む。スループットを稼ぎつつ永続性は保つ最適化
- レプリケーションと永続性: 同期レプリケーションを組めば primary クラッシュ時も レプリカで復旧可能。非同期だとレプリカに届かなかった数百 ms 分が失われる (RPO)
- 民生 SSD の電源保護: エンタープライズ SSD は電源保護コンデンサ内蔵、 民生 SSD は多くの場合内蔵していない。RDB サーバのストレージ選定で確認事項
よくある疑問
もっと学びたい方へ(おすすめ書籍)
テーブル設計と正規化、パフォーマンス考慮のインデックス設計まで実務レベルで学べる定番書。第2版ではクラウド対応も強化。
PostgreSQLの内部構造・ストレージ・インデックス機構を丁寧に解説。設計と運用計画の鉄則が学べる。
IPAデータベーススペシャリスト試験の総合対策書。インデックス関連は本サイトと合わせて学ぶと理解が深まる。
ER 図をどう「使える設計」に落とすか、実務の判断まで踏み込んだ入門書。エンティティの切り出しから多対多の扱いまで具体例が豊富。
SQLの本質的な使い方と、インデックスが効くクエリの書き方を学べる。ウィンドウ関数など現代SQLも網羅。
実務でやりがちなSQL・DB設計のアンチパターンとその回避策を体系的に学べる。
リレーショナルモデルの理論から、インデックス設計を含む実務で使えるSQLまで解説。
本セクションはAmazonアソシエイトのリンクを含みます。
もっと深くDBを学びたい方へ。
たいてっくが、SQL・データベース設計・パフォーマンスチューニング・ IPAデータベーススペシャリスト対策まで、1対1で学習をサポートします。まずは無料相談から。
「教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。」
— H 様(DB・SQL コース受講)「体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。」
— M 様(DB・SQL コース受講)「大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。」
— K 様(DB・SQL コース受講)