• 検索結果がありません。

Microsoft PowerPoint - db03-9.ppt

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - db03-9.ppt"

Copied!
10
0
0

読み込み中.... (全文を見る)

全文

(1)

データベース論(第

8

回):

トランザクションと障害時回復

北村泰彦

関西学院大学理工学部情報科学科

トランザクション

„

トランザクション

(transaction)

„

データベースに対する

応用プログラムレベルでの一つ

原子的作用

„

原子的

(at

omic)

„

それ以上分解できないこと

„

作用

(action)

„

データの

読み

(read)

書き

(write)

„

応用プログラム

レベル

„

論理的に意味のある操作レベル

„

SQL

レベルとは異なる

トランザクションの例

„ 振替送金トランザクション „ A 氏(依頼人)が 自 分の口座 から C 円(金額)を B 氏( 受取人)の口 座 に振 替送金す る . もし A 氏の 口座 残高が C 円 未 満 なら , 残 高不 足で あるこ と を A 氏 に 伝え て終 了. 残 高が C 円 以 上 で あ れば送金す る . „ トランザクション内の二つのデ ータ ベース更新 „ A 氏の残 高から C 円を引 き ,そ れを 新たな残 高とす る . „ B 氏の残高 に C 円を 加え , そ れ を 新たな残 高とす る . „ 一貫性 (in tegrit y) „ データベース 全 体 で データの 整 合 性がとれ て い る こ と . „ 例:残額の総 和は 一定. „ 一貫性が 保証さ れる よう に , ト ラ ン ザクション の原子 性を定 義 する .

トランザクションの実行

„

トランザクション実行の三つのパターン

„

COMMIT

:完遂

„

ROLLBACK

:未遂

„

DBMS

による

ROLLBAC

K

:異常終了

(2)

トランザクションの状態遷移

ACID

特性

„

原子性

(Atomicity)

„ トランザクションは,それ が 全 て行われ る か ,まった く行 われ ない かのい ずれ か で ある . „

一貫性

(Consistency)

„ トランザクションは結果データベースの一 貫性を保 証 する. „

隔離性

(Isolatio

n)

„ 各々のトラ ン ザクションは他のトラン ザクションの影響 を受け な い . „

耐久性

(Dur

ability)

„ コミットしたトランザクションが 行 ったデータ ベ ースの変化 は,その 後どのよう な 障害が発 生し ても失わ れる ことはない.

障害時回復

„

目的:データベースの

一貫性

を保つ.

„

分類

„

トランザクション障害

(transaction fai

lure)

論理の誤

による異常終了.ト

ンザクションの

アボート

.応用

プログラムの

強制終了

デッ

ドロック

による強制終了.

„

システム障害

(system failure)

DB

MS,OS

の障害

.ディスク

らデータを読み出すことはできる.シス

テムは再起動される.

„

メディア障害

(media failure)

二次記憶装置の障害

ディスクからデータの読み出しは不可能.

障害時回復

„

方法

„ トランザクション UN DO :トラ ン ザクション障 害時, 異常終 了したト ランザクション を UN DO する(データベースに対して行っ た すべて の作用を 取 り 消す). ROLLB ACK 処理. „ 全局的 UN DO :シ ステム 障 害時, 未完の 全てのトラン ザクションを UN DO する. „ 局所的 REDO :システム障害時, CO MMI T していたが, 一時的 (二 次記憶に転送 されてい ない)状態にあるトランザクション は再起 動時に RE DO する. „ 全局的 REDO :メディア障害時,データベースの 保存 用ダ ンプ をも とに,障害発 生まで CO MMI T された 全 てのトランザクシ ョンを REDO する. „

UNDO

および

REDO

はべき等である(何度繰り返しても同

じ結果になる).

(3)

障害時回復の分類

障害の例

„

振替送金トランザクション

begin read(A ,x) read(B ,y ) x:=x -C if x < 0 then rollback y:=y+C write(A,x) write(B,y) commit „

ケース

1

:wr

ite(A,x)

の直

後にシステム障害が発生

„ A の値のみ が 変更され て い るの で, 再起 動のときに begin の状 態に戻 っ て い る 必要がある . (U NDO) „

ケース

2

:co

mmit

の直後

にシステム障害が発生

„ 再起動のと き , A, B の値 が ともに変更されていると い う commit の状 態を保証す る必要がある . (R ED O)

階層型記憶アーキテクチャ

„ データベ ー スの更新は,更新した いデータの入っているページを 主 記憶の一部であるデータベー ス バッファに呼び出し,更新し,二次 記憶に書き出す.主記憶は揮発 性,二次記憶は不揮発性である. プログラムにお け る読み書き (read/writ e) と,二次記憶上の読 み書き (read-pa ge/wr ite-p age) と は一致していない. „ write が実行さ れてバッファ上では 書き込みが行われているものの, まだその書き込みがディスクに 反 映されていないページのことを ダーティページ (dirty pa ge) という. ダーティページ を ディスク上に 強制 的に書き込むことをフラッシュ (flu sh )とい う .

ログ法

„

ログ

(log)

:トラン

ザクション実行の記録.

ジャーナ

(journal)

と呼ぶこともある.

„

ログ法

(logging)

:ログを用いる障害回復の

方法.

„

ログは(ディスクの二重化などの)

安定記

(stable storage)

に格納されることが望

ましい.

(4)

ロギング法

„

ログレコ

ード

„

トランザクション

T

の開始

(begi

n)

:[B:

T]

„

トランザクション

T

による書き込み

(write(A,x))

[W:T,A

,Ol

d,New]

ただし

Old

は更新前の値

(before image)

Ne

w

は更新

後の値

(after image)

„

トランザクション

T

による読み出し

(read(A,x))

:[R:T,

A]

„

トランザクション

T

のコミット

(commit)

:[C:T]

„

トランザクション

T

のアボート

(abort)

:[A:T]

„

各ログレコードには

LSN(Lo

g Sequence

Number)

と呼ばれる作成順の識別子が付けられ

るこ

とが多い.

WAL

プロトコル

„

ロギングの操作:

以下の同期をとる必要がある.

„

データベース

バッファを介するデータベース

新作業

„

ログバッファ

を介するログ更新作業

„

ログレコードなしにはディスク中の項目を元の値に戻

すことは不可能である

„

WAL

プロトコル

(Write Ahead Log proto

col)

„

データベースの更新はそれをまずログファイ

に書き

出してから

う.

„

トランザクションを

COMMIT

する前に,全ての

データ

ベース更新

ログファイルに書き出す.

„

COMMIT

によるトランザクションの終了は,それがログ

ファイルに記録された時点である

No-undo/redo

方式

„

write

操作はログにのみ記録し,コミットするまで二次記

憶中のデータ更新は行わない.

before i

m

age

が二次記

憶に保持されているので,ログレコードに記録する必要

はない.

„ トランザクションの開始 :[B: T] を ロ グ用バッ ファ に書 き 込 む . „ トランザクションによる書き込み: [W :T, A,Ne w ]をログ用 バッファ に書き込む. „ トランザクションのコミット: [C: T] を書 いた後,ログ用 バ ッ ファをフ ラッシュする . さ らにトランザクション中の write 操作を二 次記憶に 反映させる . „ トランザクションのアボート: [A:T] をログ用バッファに書き込む. „ リス タート処理 (REDO) :[C: T] のあるコミット済みトラン ザクション を検出する. [W :T ,A ,N ew] とし て 記 録 さ れてい る write 操作 を データベースに反映させる .

Undo/no-redo

方式

„

コミットするまでに

write

操作に関する二次記憶中のデー

タ更新を行う.

after image

が二次記憶に保持されている

ので,ログレコードに記録する必要はない.

„ トランザクションの開始 :[B: T] を ロ グ用バッ ファ に書 き 込 む . „ トランザクションによる書き込み: [W :T, A,Old] をログ用 バッファに 書き込 む . WA L プロトコルに従う限 り , writ e 操作を 二次 記憶に反 映させ て もよい. „ トランザクションのコミット:ト ラ ンザクション 中の write 操作を二次 記憶に反映さ せる. [C:T] を書 い た 後, ログ用 バ ッ ファ をフラッ シュ する. „ トランザクションのアボート: [A:T] をログ用バッファに書き込む.ト ランザクション 中で write 操作 に関して be for e imag e に書き戻す. „ リス タート処理 (UNDO) :[C: T] の な いアボート済みあるい はア ボート す べきトランザクション を検出する. [W :T ,A ,Old] とし て 記 録 されている write 操作に関し て be fore image に二 次記 憶を 書 き 戻 す

(5)

Undo/redo

方式

„ 二次記憶 中の データ更新とコミット処理を 独立させる .フラッシングに 関する制約が 少なく,ディ スクアクセスが 減少する. „ トランザクションの開始: [B:T ]をログ用バッファ に書き込む. „ トランザク シ ョンによる書き 込 み :[W:T ,A ,Ol d,N ew] をロ グ用バ ッ ファに 書き込む. WAL プロトコルに従 う 限り, write 操 作 を二次記憶に 反映させ てもよい. „ トランザクションのコミット: [C:T] を書いた後,ログ用バッファをフラッシュ する. „ トランザクションのアボート: [A:T ]をログ用バッ ファに書き込む.トランザ クション 中で wr ite 操作に関して UNDO 処理をする. „ リスタート処理 (U N D O /R ED O ): [C:T ]のあるコミット済みトランザクション と,それがないアボート済みあ るいはアボート す べきトランザクションを 検出する. [W:T ,A,O ld ,Ne w ]と し て記録されている write 操作 に関して前 者に関しては RE DO 処理,後者に対しては UND O 処理を行う.

例(

Undo/Redo

方式)

„

ログ

{[B:T

1

], [W:T

1

,A,a

1

,a

2

], [B:T

2

], [C:T

1

],

[B:T

3

],

[W:T

3

,B

,b

1

,b

2

], [W:T

2

,C,c

1

,c

2

],

[W:T

3

,D,d

1

,d

2

], [C

:T

2

]}

„

ログ

{[B:T

1

], [W:T

1

,A,a

1

,a

2

], [B:T

2

], [C:T

1

],

[B:T

3

],

[W:T

3

,B

,b

1

,b

2

], [W:T

2

,C,c

1

,c

2

],

[W:T

3

,D,d

1

,d

2

],

[C:

T

2

]

}

„

逆方向にスキャンする.

[C

:T

2

]により

ランザ

クション

T

2

がコミ

ト済みであるこ

を認識する.

„

ログ

{[B:T

1

], [W:T

1

,A,a

1

,a

2

], [B:T

2

], [C:T

1

],

[B:T

3

],

[W:T

3

,B

,b

1

,b

2

], [W:T

2

,C,c

1

,c

2

],

[W:T

3

,D,d

1

,d

2

]

,

[C:

T

2

]

}

„

[W:T

3

,D,d

1

,d

2

]があるトランザクション

T

3

はコ

ミット済みで

ない

ので

この

write

操作の

UND

O

処理を行う.

(6)

„

ログ

{[B:T

1

], [W:T

1

,A,a

1

,a

2

], [B:T

2

], [C:T

1

],

[B:T

3

],

[W:T

3

,B

,b

1

,b

2

],

[W:T

2

,C,c

1

,c

2

]

,

[W:T

3

,D,d

1

,d

2

]

,

[C:T

2

]

}

„

[W:T

2

,C

,c

1

,c

2

]はコ

ト済みのトランザクショ

ンによるものなのでひとま

読み飛ばす.

„

ログ

{[B:T

1

], [W:T

1

,A,a

1

,a

2

], [B:T

2

], [C:T

1

],

[B:T

3

],

[W:T

3

,B

,b

1

,b

2

]

,

[W:T

2

,C,c

1

,c

2

]

,

[W:T

3

,D,d

1

,d

2

]

,

[C:T

2

]

}

„

[W:T

3

,B

,b

1

,b

2

]があるトラ

ザク

T

3

はコ

ミット済みで

ない

ので

この

write

操作の

UND

O

処理を行う.

„

ログ

{[B:T

1

], [W:T

1

,A,a

1

,a

2

], [B:T

2

],

[C:T

1

],

[B:T

3

]

,

[W:T

3

,B

,b

1

,b

2

]

,

[W:T

2

,C,c

1

,c

2

]

,

[W:T

3

,D,d

1

,d

2

]

,

[C:

T

2

]

}

„

[C:T

1

]より

T

1

をコ

ミット済みのトランザクション

に加

える.

„

ログ

{

[B:

T

1

], [W:T

1

,A,a

1

,a

2

], [B:T

2

], [C:T

1

],

[B:T

3

],

[W:T

3

,B

,b

1

,b

2

], [W:T

2

,C,c

1

,c

2

],

[W:T

3

,D,d

1

,d

2

], [C

:T

2

]

}

„

[W:T

1

,A,a

1

,a

2

]はコミット済みのトラ

ンザク

T

1

によるものなのでひとまず読み飛ばす.

(7)

„

ログ

{

[B:

T

1

], [W:T

1

,A,a

1

,a

2

]

, [B:T

2

], [C:T

1

],

[B:T

3

],

[W:T

3

,B

,b

1

,b

2

], [W:T

2

,C,c

1

,c

2

],

[W:T

3

,D,d

1

,d

2

], [C

:T

2

]

}

„

今度はログを先頭から順方向にスキャンする.

コミ

ット済みのトランザクション

T

1

による

[W:T

1

,A,a

1

,a

2

]に対

する

REDO

操作を行う.

„

ログ

{

[B:

T

1

], [W:T

1

,A,a

1

,a

2

]

, [B:T

2

], [C:T

1

],

[B:T

3

],

[W:T

3

,B

,b

1

,b

2

], [W:T

2

,C,c

1

,c

2

]

,

[W:T

3

,D,d

1

,d

2

], [C

:T

2

]

}

„

コミ

ット済みのトランザクション

T

2

による

[W:T

2

,C

,c

1

,c

2

]に対する

REDO

操作を行う.

チェックポイント法

„

チェッ

ポイント法

(checkpoi

nti

ng)

:障害時回復を能率良

く行うための手法.一定の周期でバッファの内容をフラッ

シュする.

„

チェッ

ポイントでの作業

„ 実行中のト ラ ン ザクションの 全 てを一時 停 止 (s uspe nd) する. „ データベースバッファの 内 容 をデータベースに書き出 す . „ チェックポイントレコード(実 行中トラン ザクションリスト)を ロ グファ イルに書き 出 す. „ 中断され て い た トランザクションを再開 (resume) する. „

チェッ

ポイントを導入すると,チェックポイント以前に終

了している

ランザクションはシステム再スタート時に回

復作業をする必要がないという利点がある.

チェックポイント法

„ チェ ックポイン ト レコードから UNDO / REDO をするトランザク ションを 見つけるアル ゴリズム 1.UNDO トランザク シ ョンのリスト を チ ェ ック ポイント 時に 実行 中であ っ たトラン ザク ショ ン の リ ス トとする . REDO トラ ンザ ク シ ョンの リ ス ト を NIL とする . 2. ロ グ フ ァ イル を そ のチェックポ イ ン ト レコー ド から 障害 発生時 まで順 に 検査する . 2-1. もし BEGIN TRA N SACTI O N レ コードを見つけれ ば , そのトラン ザクションを UND O リストに 追加す る. 2-2. もし CO MMIT レコ ー ド を見つ け れ ば, そのトラン ザ クシ ョンを UND O リス トから RED O リストに移動する . 2-3. ログ ファイ ル の 終わりにき たら終 了する.

(8)

コミット

コンシ

テントチェックポイント法

(commit consis

tent checkpointing)

„

手順

1.

新たなトランザクショ

ンの開始を禁止する.

2.

アクティブ

トランザ

クションが

べてコミ

ット

かアボートするまで処理を続ける.

3.

ログ用バッファ

データ用バッファ

をこ

の順に

フラッシュ

る.

4.

ログ用バッファ

ログレコード

[CHEC

KPOINT]

を書き込んだ後フラッシュす

る.

コミット

コンシ

テントチェックポイント法

(commit consis

tent checkpointing)

„

特徴

„

チェックポイントをとるた

めにはアクテ

ィブなト

ランザクションがない状態に入らなければな

らな

い.

„

長時間続くトランザクションが存在する場合

には多くの処理要求を長時間にわた

って待

たせること

なる.

„

フラッシュ時のデータ書き

込みに多くの時間

必要とする.

キャッシュコンシステントチェックポイント

(cache consi

stent checkpointing)

„

手順

1.

新たな基本操作の開始を禁止する.

2.

処理中の基本操作の終了を待つ.

3.

ログ用バッファ

データ用バッファ

をこ

の順に

フラッシュ

る.

4.

ログ用バッファ

ログレコード

[CHECKPOINT:TL]

を書き

んだ後フラッ

シュする.

TL

は現在アクティブ

なトラ

ンザクショ

の集合である.

キャッシュコンシステントチェックポイント

(cache consi

stent checkpointing)

„

特徴

„

リスタート処理では最新のログレコード

[CHECKPOINT:TL]

までの範囲ではなく,

TL

の中にアボート済みあるいはアボートすべき

トランザクションがあった場合には,

トラ

ンザクショ

の開始時点までログをさかのぼ

る必要がある.

(9)

„

ログ

{[B:T 1], [W :T 1,A ,a 1,a 2], [ B: T 2], [ C: T 1], [B: T 3], [W :T 3,B, b 1,b 2], [CHECK POINT,{ T 2,T 3}], [W:T 2,C ,c 1,c 2], [ W :T 3,D, d 1,d 2], [C:T 2]} „ ログを逆方向にスキャンする. [C: T 2]より T 2をコミット済 みトラン ザクションに加える. „ [W: T 3,D, d 1,d 2]に対する UN DO 処理を行う . „ [W: T 2,C ,c 1,c 2]を読み飛 ばす. „ [CHECK POINT,{ T 2,T 3}] に達しても T 3はア ボート す べ き なので さ らにスキャンを続ける. „ [W: T 3,B ,b 1,b 2]に対する UN DO 処理を行う . „ [B:T 3]でスキ ャ ンを終了する. „ [CHECK POINT,{ T 2,T 3}] か ら 順方向にスキャンする. „ コミット済み T 2による [W :T 2,C, c 1,c 2]に対する REDO 処理を 行 い 終 了する.

シャドーページ法

„ デ ィ スク中の ペー ジをペー ジテー ブ ルと いう アド レス変換 テーブルを介して間 接 的 に アク セス する . „ トランザクションの開始:カレントページテーブ ルというトランザクション用のページテーブル 領域を確保する.元のページテーブルはシャ ドーページ テ ーブルと呼ぶ.その位置を示す ポイ ンタ を シ ャド ーペ ー ジ テ ー ブルポインタ と いう.カレントページテーブル読み書きの た め のバッファをページテー ブル用バッ ファという. „ トランザクションによる書 き込み:ページテー ブル中の i番目のページ P(i) の更新を行うとす る. それが P( i)に対する 最初の更新であれば, ディスク中の空ページ P' を確保して P(i) の内 容をコピーし,カレ ン トページテーブル i番目の エ ン トリが指すページを P' に変更する.その後 , データ用バッファ上の P' を更新する. „ トランザクションのコミッ ト:データ用バッファを フラッシュし た後 ,ページテーブル用バッファ を フ ラ ッ シ ュ する .さ らに ディスク中のシ ャド ー ペ ー ジ テ ーブルポインタ を カレント ペ ー ジ テ ー ブルを 指 すようにする. „ トランザク シ ョンのアボート:カ レ ントページを 廃棄する.

シャドーページ法

„

問題点

„

更新を行う度にディスク中のデータを格納するページ

が変化する

め,ファイ

を構成するページ相互の位

置関係がバラバラになる.データ読み出しがディスク

へのランダムアク

スばかりになり,アクセス時間が

増加する.

„

シャドーページテーブ

ルポインタ

書き換える直前に

システム障害が生じたとする.その場合,カレントテー

ブルや更新後のデータを格納していたページ

がディス

ク中のゴミとなる.

„

ページ

スの際にページ

ーブルによるアドレス

変換のオーバヘッドがある.

メディア障害回復

„

トランザクション

障害やシステム障害に

べてメディア障害が発生する確率ははるか

に小さいが,その対処を

行わなかった場合

の損失は甚大である.

„

メディア障害に

対する基本的な対応はダン

(dump)

処理の実行である.

„

ログは別々の装置に二重に書き込みを

う必要がある.

(10)

ダンプ処理

„

アクティブなトランザクションがない状態で,

ディスク中のデータの内容を他のディスク

あるいは磁気テープなどにコピーする.

„

障害回復時に

は,まずバックアップ用の

ディスクに最新のダンプ内容を

復旧する

次に,ログを用いてダンプごにコミットした

全てのトランザクションの

write

操作を

REDO

する.

参照

関連したドキュメント

口腔の持つ,種々の働き ( 機能)が障害された場 合,これらの働きがより健全に機能するよう手当

このエアコンは冷房運転時のドレン(除湿)水を内部で蒸発さ

話者の発表態度 がプレゼンテー ションの内容を 説得的にしてお り、聴衆の反応 を見ながら自信 をもって伝えて

北区で「子育てメッセ」を企画運営することが初めてで、誰も「完成

(注)

ALPS 処理水希釈放出設備は通常運転~停止の他, 「意図しない形での ALPS

ALPS 処理水希釈放出設備は通常運転~停止の他, 「意図しない形での ALPS