データベース12 - トランザクションと同時実行制御
Post on 08-Aug-2015
117 Views
Preview:
TRANSCRIPT
トランザクションとデータベース構造編での学習⽬標
3
トランザクションを理解する
データベースの同時実⾏制御の仕組みを理解する
データベースの障害回復⽅法を理解する
効率的なデータアクセスのためのデータベース構造およびインデックスを理解する
同時実⾏制御
5
¥20,000引出 ¥50,000振込READ READ
WRITE
Y=Y-¥20,000
Y=¥20,000
Y=¥0 Y=Y+¥50,000
Y=¥70,000
WRITE
更新の喪失¥50,000でなければおかしい…
同時実⾏制御回 ⽇付 テーマ12 6/25 トランザクションと同時実⾏制御13 7/2 トランザクションと障害回復14 7/9 データベース構造とインデックス
7
トランザクション,ロック,同時実⾏制御について学ぶ
例;振替送⾦
9
(1) ⼝座Aの残⾼から10万円を引く
⼝座Aから⼝座Bへ10万円を振替送⾦
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼-10 WHERE ⼝座 = 'A';
(2) ⼝座Bの残⾼に10万円を⾜すUPDATE 銀⾏⼝座 SET 残⾼ = 残⾼+10 WHERE ⼝座 = 'B';
⼝座 残⾼A 20B 5
銀⾏⼝座⼝座 残⾼A 10B 5
銀⾏⼝座(1) ⼝座 残⾼
A 10B 15
銀⾏⼝座(2)
1トランザクション
例;アイテムの購⼊
(1) 薬草の在庫数を3個減らす
ユーザ=アリスが1個10Gの薬草を3個購⼊
UPDATE 在庫 SET 残数 = 残数-3 WHERE アイテム名 = '薬草';
(2) ユーザの所有アイテム数を3個増やすUPDATE 所有アイテム SET 所有数 = 所有数+3 WHERE ユーザ名= 'アリス' AND アイテム名 = '薬草';
(3) ユーザの所持⾦を30G減らすUPDATE 所持⾦ SET 所持⾦ = 所持⾦-30 WHERE ユーザ名 = 'アリス';
(4) ユーザの購⼊履歴を更新するINSERT INTO 購⼊履歴 VALUES('薬草', '2014/3/30');
1トランザクション
例;振替送⾦
15
(1) ⼝座Aの残⾼から10万円を引く
⼝座Aから⼝座Bへ10万円を振替送⾦
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼-10 WHERE ⼝座 = 'A';
(2) ⼝座Bの残⾼に10万円を⾜すUPDATE 銀⾏⼝座 SET 残⾼ = 残⾼+10 WHERE ⼝座 = 'B';
⼝座 残⾼A 20B 5
銀⾏⼝座⼝座 残⾼A 10B 5
銀⾏⼝座(1) ⼝座 残⾼
A 10B 15
銀⾏⼝座(2)
⼝座 残⾼A 10B 15
例;振替送⾦
16
データベースダウン!
(1) ⼝座Aの残⾼から10万円を引く
⼝座Aから⼝座Bへ10万円を振替送⾦
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼-10 WHERE ⼝座 = 'A';
(2) ⼝座Bの残⾼に10万円を⾜すUPDATE 銀⾏⼝座 SET 残⾼ = 残⾼+10 WHERE ⼝座 = 'B';
⼝座 残⾼A 20B 5
銀⾏⼝座⼝座 残⾼A 10B 5
銀⾏⼝座(1)
銀⾏⼝座(2)
例;振替送⾦
19
(1) ⼝座Aの残⾼から10万円を引く
⼝座Aから⼝座Bへ10万円を振替送⾦
⼝座 残⾼A 20B 5
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼-10 WHERE ⼝座 = 'A';
銀⾏⼝座
(2) ⼝座Bの残⾼に10万円を⾜すUPDATE 銀⾏⼝座 SET 残⾼ = 残⾼+10 WHERE ⼝座 = 'B';
⼝座 残⾼A 10B 5
銀⾏⼝座(1) ⼝座 残⾼
A 10B 15
銀⾏⼝座(2)
コミット
例;振替送⾦
20
データベースダウン!
(1) ⼝座Aの残⾼から10万円を引く
⼝座Aから⼝座Bへ10万円を振替送⾦
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼-10 WHERE ⼝座 = 'A';
(2) ⼝座Bの残⾼に10万円を⾜すUPDATE 銀⾏⼝座 SET 残⾼ = 残⾼+10 WHERE ⼝座 = 'B';
⼝座 残⾼A 20B 5
銀⾏⼝座⼝座 残⾼A 10B 5
銀⾏⼝座(1)
ロールバック
例;振替送⾦
21
データベースダウン!
(1) ⼝座Aの残⾼から10万円を引く
⼝座Aから⼝座Bへ10万円を振替送⾦
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼-10 WHERE ⼝座 = 'A';
⼝座 残⾼A 20B 5
銀⾏⼝座⼝座 残⾼A 10B 5
銀⾏⼝座(1)
ロールバック(1)の処理はなかったことに
Atomicity(原⼦性)
22
トランザクションでのデータ操作は,すべてが実⾏されているか,いずれも実⾏されていないかのどちらかであるという性質
原⼦:事物を構成する最⼩単位
トランザクション:処理を構成する最⼩単位
ALL or NOTHING
例;商品番号の変更
25
商品番号 商品名110 ノートPC250 外付けHDD330 USBメモリ420 ディスプレイ
伝票番号 商品番号 売上数123 330 10124 250 5125 420 2126 110 1
商品表 売上表
商品番号を330→340に変更
商品番号 商品名110 ノートPC250 外付けHDD340 USBメモリ
商品番号420を削除
整合性がとれなくなる
復習
整合性維持機能
27
商品番号 商品名110 ノートPC250 外付けHDD330 USBメモリ420 ディスプレイ
伝票番号 商品番号 売上数123 330 10124 250 5125 420 2126 110 1
商品表 売上表
商品番号 商品名110 ノートPC250 外付けHDD340 USBメモリ420 ディスプレイ
整合性を維持
340
売上表も変更商品番号を330→340に変更商品番号420を削除
復習
例;ホテルの部屋の予約(1)
32
部屋 残室数シングル 5
空室状況①残室数を確認
SELECT5
②残室数を確認ボブ キャロル
時間経過 残室数が⼀つしか減らない
更新の喪失
SELECT5
部屋 残室数シングル 4
③部屋を予約
UPDATE-1 ④部屋を予約
UPDATE-1
部屋 残室数シングル 4
例;ホテルの部屋の予約(2)
33
部屋 残室数シングル 1
空室状況①残室数を確認
SELECT1
③残室数を確認
ボブ キャロル
時間経過
空室があるのに「空室なし」と表⽰される
SELECT0
部屋 残室数シングル 0
②部屋を予約
UPDATE-1
部屋 残室数シングル 1
ROLLBACK④キャンセル
ダーティリード
例;商品の在庫数
34
商品番号 在庫数110 50
在庫①在庫数を確認
SELECT50
④在庫数を確認
時間経過
同じ問合せを連続で⾏ったのに,結果が異なる
SELECT30
商品番号 在庫数110 30
③商品を出荷
UPDATE-20
ノンリピータブルリード
②在庫数を確認
SELECT50
例;成績の集計
35
学⽣番号 成績1001 801002 621003 74
成績
③平均の算出
時間経過
前の問合せではなかった(幻の)タプルが出現
1004 84
②学⽣の追加INSERT
ファントムリード
①平均の算出
SELECT AVG72
SELECT AVG75
直列化可能性
36
部屋 残室数シングル 5
空室状況①残室数を確認
SELECT5
②残室数を確認ボブ キャロル
時間経過
SELECT5
部屋 残室数シングル 4
③部屋を予約
UPDATE-1 ④部屋を予約
UPDATE-1
部屋 残室数シングル 4
直列化可能性
37
T1 T2
READ x READ xx = x - 1
x = x - 1WRITE x
WRITE x
READ:読込みWRITE:書込み
初期値:x = 5
x = 4
T1
READ xx = x - 1WRITE x
T2
READ xx = x - 1WRITE x
初期値:x = 5T2
READ xx = x - 1WRITE x
T1
READ xx = x - 1WRITE x
or
x = 3 x = 3このスケジュールは,直列化可能でない
直列化可能な例
T1 T2
READ xx = x - 1WRITE x
READ xREAD y WRITE xy = y - 1WRITE y
READ yy = y - 1WRITE y
初期値:x = 5, y = 5 T1
READ xx = x - 1WRITE xREAD yy = y - 1WRITE y
orT2
READ xWRITE xREAD yy = y - 1WRITE y
T2
READ xWRITE xREAD yy = y - 1WRITE y
T1
READ xx = x - 1WRITE xREAD yy = y - 1WRITE y
初期値:x = 5, y = 5
x = 4, y = 3 x = 4, y = 3x = 4, y = 3
このスケジュールは直列化可能
ロッキング
40
部屋 残室数シングル 5
空室状況(1) 残室数を確認
SELECT5
(1) 残室数を確認ボブ キャロル
時間経過
SELECT
部屋 残室数シングル 4
(2) 部屋を予約
UPDATE-1
ロック
ロック時はアクセス不可
1.データにアクセスする直前に• ロックがかかっていなければロックする• ロックがかかっていればアンロックされるまで待つ
2.データへのアクセスが終了した時点でアンロックする
ロッキング
(1) 残室数を確認
ボブ キャロル
時間経過
SELECT4
部屋 残室数シングル 4
(2) 部屋を予約
UPDATE-1
(2) 部屋を予約
UPDATE-1
部屋 残室数シングル 3
COMMIT
部屋 残室数シングル 4
空室状況
ロック
共有ロックと排他ロック
43
部屋 残室数シングル 5
空室状況(1) 残室数を確認
SELECT5
(1) 残室数を確認ボブ キャロル
時間経過
SELECT5
部屋 残室数シングル 4
(2) 部屋を予約
UPDATE-1
共有ロック
排他ロックSELECT
5
OK
直列化可能性
T1 T2LOCK xREAD xx = x - 1WRITE xUNLOCK x
LOCK xREAD xx = x - 1WRITE xUNLOCK x
READ:読込みWRITE:書込み
初期値:x = 5
x = 3
T1
LOCK xREAD xx = x - 1WRITE xUNLOCK x
T2
LOCK xREAD xx = x - 1WRITE xUNLOCK x
初期値:x = 5
or
x = 3
LOCK:ロックUNLOCK:アンロック
T2
LOCK xREAD xx = x - 1WRITE xUNLOCK x
T1
LOCK xREAD xx = x - 1WRITE xUNLOCK x
x = 3
このスケジュールは直列化可能
直列化可能性を保証するために
50
T1
LOCK XLOCK YREAD XX = X - 10000WRITE XREAD YY = Y + 10000WRITE YUNLOCK XUNLOCK Y
成⻑相
縮退相
ロックをかける相
ロックを解除する相
2相ロッキング
銀⾏⼝座X
銀⾏⼝座Y¥10,000振込み
ボブ
銀⾏⼝座Yにアクセスできるまで待機状態
ロックによる問題点
51
銀⾏⼝座Xにアクセスできるまで待機状態
銀⾏⼝座X
銀⾏⼝座Y¥10,000振込み
ボブによる排他ロック
¥5,000振込み
キャロルによる排他ロック
ボブ キャロル
ロックによる問題点
52
T1 T2
LOCK XLOCK Y
LOCK Y LOCK X
Yがアンロックされるまで待機状態
Xがアンロックされるまで待機状態
待機中…
デッドロック複数のトランザクションが,他のトランザクションがロックしているデータが解除されるのを待っていて,先に進めないでいる状態
待合せグラフによる検証
55
T S
Sの終了を待っている
Tの終了を待っている
トランザクションをノードとし,トランザクションTがトランザクションSの終了を待っているときに,TからSへのアークを設定することで作成されたグラフ
待合せグラフ
待合せグラフ内にループが存在すれば,デッドロックが発⽣していることがわかる
デッドロック発⽣時の対処法 デッドロック状態にあるどちらかのロックを解
除(トランザクションを取り消す)
銀⾏⼝座X
銀⾏⼝座Y¥10,000振込み
ボブによる排他ロック
ボブ キャロル
¥5,000振込み
キャロルによる排他ロック
まとめ
59
ACID特性Atomicity(原⼦性):成功か失敗かConsistency(整合性):制約に従えIsolation(隔離性):⼀つ⼀つの処理を隔離せよ
同時実⾏制御ロッキング,共有ロック,排他ロック直列化可能性2相ロッキング,成⻑相,縮退相デッドロック
本⽇学習したキーワード〜トランザクションとデータベース構造編〜
60
2相ロッキング 縮退相 ハッシュ関数ACID特性 順次編成ファイル ハッシュ結合Atomicity(原⼦性) 障害回復 ハッシュの衝突B+⽊インデックス 除算法 バランス⽊B⽊インデックス ⼈的障害 ビフォアイメージConsistency(整合性) 成⻑相 ファイルDurability(耐久性) ダーティリード ファントムリードIsolation(隔離性) ダンプファイル フィールドWALプロトコル チェックポイント マージ結合アフタイメージ 中間ノード 待合せグラフ⼊れ⼦結合 直接編成ファイル リーフノードインデックス 直列化可能性 両⽴性⾏列インデックスによる結合 データ部 ルートノードインデックスファイル データベースダンプ レコード基数変換法 データベースバックアップ ロールバック共有ロック デッドロック ロールフォワード更新の喪失 同時実⾏制御 ロギングコミット トランザクション ログ(ジャーナル)索引部 トランザクション障害 ログファイル索引編成ファイル ノンリピータブルリード ロッキング⾃乗・中央法 媒体障害 ロックシステム障害 排他ロックシノニム ハッシュインデックス
これまでに学習したキーワード〜トランザクションとデータベース構造編〜
61
2相ロッキング 縮退相 ハッシュ関数ACID特性 順次編成ファイル ハッシュ結合Atomicity(原⼦性) 障害回復 ハッシュの衝突B+⽊インデックス 除算法 バランス⽊B⽊インデックス ⼈的障害 ビフォアイメージConsistency(整合性) 成⻑相 ファイルDurability(耐久性) ダーティリード ファントムリードIsolation(隔離性) ダンプファイル フィールドWALプロトコル チェックポイント マージ結合アフタイメージ 中間ノード 待合せグラフ⼊れ⼦結合 直接編成ファイル リーフノードインデックス 直列化可能性 両⽴性⾏列インデックスによる結合 データ部 ルートノードインデックスファイル データベースダンプ レコード基数変換法 データベースバックアップ ロールバック共有ロック デッドロック ロールフォワード更新の喪失 同時実⾏制御 ロギングコミット トランザクション ログ(ジャーナル)索引部 トランザクション障害 ログファイル索引編成ファイル ノンリピータブルリード ロッキング⾃乗・中央法 媒体障害 ロックシステム障害 排他ロックシノニム ハッシュインデックス
top related