データベース13 - トランザクションと障害回復
TRANSCRIPT
トランザクションとデータベース構造編での学習⽬標
3
トランザクションを理解する
データベースの同時実⾏制御の仕組みを理解する
データベースの障害回復⽅法を理解する
効率的なデータアクセスのためのデータベース構造およびインデックスを理解する
障害回復機能回 ⽇付 テーマ12 6/25 トランザクションと同時実⾏制御13 7/2 トランザクションと障害回復14 7/9 データベース構造とインデックス
7
トランザクション,Durability(耐久性),障害回復について学ぶ
トランザクション障害
12
T1
READ xx = x - 1WRITE x
トランザクション⾃⾝の障害によりトランザクションが異常終了した場合に⽣じる障害
例;DB操作の失敗,参照データの不備,論理エラー
システム
データベース
ネットワーク
トランザクションアプリケーション
管理者
システム
データベース
ネットワーク
トランザクションアプリケーション
管理者
システム障害
13
ソフトウェアやハードウェア,ネットワークなどのトラブルによりシステムが停⽌する障害
T1
READ xx = x - 1WRITE x
システム
データベース
ネットワーク
トランザクションアプリケーション
管理者
媒体障害
14
データを格納している記憶媒体の故障により,データベースの⼀部または全部が破損してしまう障害
T1
READ xx = x - 1WRITE x
システム
データベース
ネットワーク
トランザクションアプリケーション
管理者
⼈的障害
15
データベース管理者や操作員などの⼈⼿による操作において⽣じる操作ミスによって発⽣する障害
T1
READ xx = x - 1WRITE x
DROP DATABASE ...
mysql stop
データベースバックアップ
18
時間経過
2014/7/1 0:00
2014/7/2 0:00
定期的にデータベース内のすべての情報をコピーとして保存しておくこと
データベースダンプデータベースダンプ
データベースダンプ
number name class1 佐藤 B12 鈴⽊ B13 ⾼橋 D14 ⽥中 A1
DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (...);
INSERT INTO `students` VALUES (...);
...
ダンプ
復元
students
データベース内のすべての情報をコピーとして保存しておいたもの
ダンプファイル
データベースを復元するための⼀連のSQL
mysqldump -u user database > dump.sql
mysql -u user database < dump.sql復元ダンプ
MySQLのコマンド
ロギング
23
すべてのデータベースの操作記録を保存しておくこと
時刻 トランザクション
操作 関係 タプル 列 旧値 新値
14:25 T1 START
14:28 T1 UPDATE 銀⾏ A 残⾼ 20 10
14:29 T2 START
14:30 T1 UPDATE 銀⾏ B 残⾼ 5 10
14:31 T1 COMMIT
14:33 T2 INSERT 銀⾏ C C, 0
14:34 T2 COMMIT
ログファイル
ログ(ジャーナル)記録⽇時トランザクションIDログレコードの種類
– トランザクション開始,INSERT,DELETE,UPDATE,正常終了,異常終了など
ビフォアイメージ(更新前ログ,旧値)– データベースを更新(登録,削除も含む)
する前の情報アフタイメージ(更新後ログ,新値)
– データベースを更新した後の情報 24
ログを書き出すタイミング
26
(1) トランザクションの開始
(3) トランザクションの終了
(2) データベースの実更新データベースの実更新後?
ログ 途中で障害が発⽣すると,ログが中途半端になる
トランザクションの終了後?ログ 途中で障害が発⽣すると,
ログが中途半端になる
データベースの実更新前?途中で障害が発⽣しても,ログは残る
ログ
2015.07.02修正
WAL (Write Ahead Log) プロトコル(ログ先書きプロトコル)
27
データベースを実更新する以前にログを格納する⽅法
(1) トランザクションの開始
(3) トランザクションの終了(2) データベースの実更新
データベースの実更新前?途中で障害が発⽣しても,ログは残る
ログ
2015.07.02修正
WALプロトコルの例
28
T1
STARTUPDATE(A, 10)UPDATE(B, 10)COMMIT
主記憶 2次記憶
A 20B 5
データ⽤バッファ
ログ⽤バッファ
A 20B 5
トランザクション
... ...
ログファイル
データベース(1) 更新要求
2015.07.02追加
WALプロトコルの例
29
T1
STARTUPDATE(A, 10)UPDATE(B, 10)COMMIT
主記憶 2次記憶
A 10B 5
データ⽤バッファ
ログ⽤バッファ
A 20B 5
トランザクション
...T1, A, 20, 10
...
ログファイル
データベース(2) メモリに更新内容とログを記録(2) メモリに更新内容とログを記録
2015.07.02追加
WALプロトコルの例
30
T1
STARTUPDATE(A, 10)UPDATE(B, 10)COMMIT
主記憶 2次記憶
A 10B 5
データ⽤バッファ
ログ⽤バッファ
A 20B 5
トランザクション
...T1, A, 20, 10
...T1, A, 20, 10
ログファイル
データベース
(3) ログを先に2次記憶に書出し
2015.07.02追加
WALプロトコルの例
31
T1
STARTUPDATE(A, 10)UPDATE(B, 10)COMMIT
主記憶 2次記憶
A 10B 5
データ⽤バッファ
ログ⽤バッファ
A 10B 5
トランザクション
...T1, A, 20, 10
...T1, A, 20, 10
ログファイル
データベース(4) ログの書出し後にデータベースを実更新
2015.07.02追加
ロールバックとロールフォワード
34
ロールバック(UNDO)– 現在のデータベースの状態から時間的に遡って,過去のあ
る時点のデータベースの状態に復旧する⽅法– 巻き戻すためにログの中のビフォアイメージが使⽤される
ロールフォワード(REDO)– 事前に保存していたデータベースダンプを磁気ディスクに
移し,その後,ログのアフタイメージを適⽤することで,障害のあった直前の状態に復旧させる⽅法
トランザクション障害時の対応
35
T1
READ xx = x - 1WRITE x
システム
データベース
ネットワーク
トランザクションアプリケーション
管理者 障害発⽣時のトランザクションにロールバックを適⽤
システム
データベース
ネットワーク
トランザクションアプリケーション
管理者
システム障害時の対応
36
T1
READ xx = x - 1WRITE x
障害発⽣時のトランザクションにロールバックを適⽤ コミット済みであるが,記憶媒体への書込みが未完了
のトランザクションにはロールフォワードを適⽤
システム
データベース
ネットワーク
トランザクションアプリケーション
管理者
媒体障害時の対応
37
T1
READ xx = x - 1WRITE x
バックアップ時点の状態までデータベースを復旧した後,バックアップ以降で障害発⽣までにコミット済みのトランザクションにロールフォワードを適⽤
システム
データベース
ネットワーク
トランザクションアプリケーション
管理者
⼈的障害時の対応
38
T1
READ xx = x - 1WRITE x
DROP DATABASE ...
mysql stop
障害の内容に応じて,ロールバックとロールフォワードを適⽤
T5
コミット
コミットT4
障害発⽣
データベースへの更新内容の反映
T1
コミット
T2
コミット
コミットT3
主記憶
定期的に2次記憶(ハードディスク)に反映させる必要がある
主記憶上のデータも消去される
チェックポイントを⽤いた障害回復⽅法
T1
コミット
T2
コミット
コミットT3
コミットT4
T5
コミット
障害発⽣
チェックポイント
ロールフォワードロールフォワード
ロールバックロールバック
チェックポイントを⽤いた障害回復⽅法
T1
コミット
T2
コミット
コミットT3
コミットT4
T5
コミット
障害発⽣
チェックポイント
チェックポイント時点でコミット済みであるので,回復処理は不要
チェックポイントを⽤いた障害回復⽅法
T1
コミット
T2
コミット
コミットT3
コミットT4
T5
コミット
障害発⽣
チェックポイント
障害発⽣前にコミット済みであるので,チェックポイント以降の操作をロールフォワード障害発⽣前にコミット済みであるので,チェックポイント以降の操作をロールフォワード
チェックポイントを⽤いた障害回復⽅法
T1
コミット
T2
コミット
コミットT3
コミットT4
T5
コミット
障害発⽣
チェックポイント
障害発⽣時に実⾏中であるので,ロールバック障害発⽣時に実⾏中であるので,ロールバック
本⽇学習したキーワード〜トランザクションとデータベース構造編〜
50
2相ロッキング 縮退相 ハッシュ関数ACID特性 順次編成ファイル ハッシュ結合Atomicity(原⼦性) 障害回復 ハッシュの衝突B+⽊インデックス 除算法 バランス⽊B⽊インデックス ⼈的障害 ビフォアイメージConsistency(整合性) 成⻑相 ファイルDurability(耐久性) ダーティリード ファントムリードIsolation(隔離性) ダンプファイル フィールドWALプロトコル チェックポイント マージ結合アフタイメージ 中間ノード 待合せグラフ⼊れ⼦結合 直接編成ファイル リーフノードインデックス 直列化可能性 両⽴性⾏列インデックスによる結合 データ部 ルートノードインデックスファイル データベースダンプ レコード基数変換法 データベースバックアップ ロールバック共有ロック デッドロック ロールフォワード更新の喪失 同時実⾏制御 ロギングコミット トランザクション ログ(ジャーナル)索引部 トランザクション障害 ログファイル索引編成ファイル ノンリピータブルリード ロッキング⾃乗・中央法 媒体障害 ロックシステム障害 排他ロックシノニム ハッシュインデックス
これまでに学習したキーワード〜トランザクションとデータベース構造編〜
51
2相ロッキング 縮退相 ハッシュ関数ACID特性 順次編成ファイル ハッシュ結合Atomicity(原⼦性) 障害回復 ハッシュの衝突B+⽊インデックス 除算法 バランス⽊B⽊インデックス ⼈的障害 ビフォアイメージConsistency(整合性) 成⻑相 ファイルDurability(耐久性) ダーティリード ファントムリードIsolation(隔離性) ダンプファイル フィールドWALプロトコル チェックポイント マージ結合アフタイメージ 中間ノード 待合せグラフ⼊れ⼦結合 直接編成ファイル リーフノードインデックス 直列化可能性 両⽴性⾏列インデックスによる結合 データ部 ルートノードインデックスファイル データベースダンプ レコード基数変換法 データベースバックアップ ロールバック共有ロック デッドロック ロールフォワード更新の喪失 同時実⾏制御 ロギングコミット トランザクション ログ(ジャーナル)索引部 トランザクション障害 ログファイル索引編成ファイル ノンリピータブルリード ロッキング⾃乗・中央法 媒体障害 ロックシステム障害 排他ロックシノニム ハッシュインデックス