データベース
第12回
トランザクションと同時実⾏制御
1
2015年6⽉25⽇(⽊) 7・8時限
担当:奥 健太
トランザクションと
データベース構造編
回 ⽇付 テーマ
12 6/25 トランザクションと同時実⾏制御
13 7/2 トランザクションと障害回復
14 7/9 データベース構造とインデックス
2
トランザクションと
データベース構造編での学習⽬標
3
トランザクションを理解する
データベースの同時実⾏制御の仕組みを理
解する
データベースの障害回復⽅法を理解する
効率的なデータアクセスのためのデータ
ベース構造およびインデックスを理解する
同時実⾏制御
4
vs.
復習
同時実⾏制御
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でなければおかしい…
同時実⾏制御
6
¥20,000引出
¥50,000振込
READ
READ
WRITE
Y=Y-¥20,000
Y=¥20,000
Y=¥0
Y=Y+¥50,000
Y=¥50,000
WRITE
同時実⾏制御
回 ⽇付 テーマ
12 6/25 トランザクションと同時実⾏制御
13 7/2 トランザクションと障害回復
14 7/9 データベース構造とインデックス
7
 トランザクション,ロック,同時実⾏制御
について学ぶ
トランザクションとは
8
例;振替送⾦
9
(1) ⼝座Aの残⾼から10万円を引く
⼝座Aから⼝座Bへ10万円を振替送⾦
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼-10 WHERE ⼝座 = 'A';
(2) ⼝座Bの残⾼に10万円を⾜す
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼+10 WHERE ⼝座 = 'B';
⼝座 残⾼
A 20
B 5
銀⾏⼝座
⼝座 残⾼
A 10
B 5
銀⾏⼝座
(1) ⼝座 残⾼
A 10
B 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トランザクション
トランザクション
11
利⽤者からみたときの処理の単位
トランザクションの
もつべき特性
同時実⾏制御の仕組み
本⽇の講義で学ぶこと
12
トランザクションのもつべき特性
13
ACID特性
A
C
I
D
成功か失敗か
14
例;振替送⾦
15
(1) ⼝座Aの残⾼から10万円を引く
⼝座Aから⼝座Bへ10万円を振替送⾦
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼-10 WHERE ⼝座 = 'A';
(2) ⼝座Bの残⾼に10万円を⾜す
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼+10 WHERE ⼝座 = 'B';
⼝座 残⾼
A 20
B 5
銀⾏⼝座
⼝座 残⾼
A 10
B 5
銀⾏⼝座
(1) ⼝座 残⾼
A 10
B 15
銀⾏⼝座
(2)
⼝座 残⾼
A 10
B 15
例;振替送⾦
16
データベースダウン!
(1) ⼝座Aの残⾼から10万円を引く
⼝座Aから⼝座Bへ10万円を振替送⾦
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼-10 WHERE ⼝座 = 'A';
(2) ⼝座Bの残⾼に10万円を⾜す
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼+10 WHERE ⼝座 = 'B';
⼝座 残⾼
A 20
B 5
銀⾏⼝座
⼝座 残⾼
A 10
B 5
銀⾏⼝座
(1)
銀⾏⼝座
(2)
10万円はどこへ消えた!?
17
⼝座 残⾼
A 20
B 5
銀⾏⼝座
⼝座 残⾼
A 10
B 5
銀⾏⼝座
(1)
Atomicity(原⼦性)を保証せよ
18
成功か失敗か
コミットかロールバックか
例;振替送⾦
19
(1) ⼝座Aの残⾼から10万円を引く
⼝座Aから⼝座Bへ10万円を振替送⾦
⼝座 残⾼
A 20
B 5
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼-10 WHERE ⼝座 = 'A';
銀⾏⼝座
(2) ⼝座Bの残⾼に10万円を⾜す
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼+10 WHERE ⼝座 = 'B';
⼝座 残⾼
A 10
B 5
銀⾏⼝座
(1) ⼝座 残⾼
A 10
B 15
銀⾏⼝座
(2)
コミット
例;振替送⾦
20
データベースダウン!
(1) ⼝座Aの残⾼から10万円を引く
⼝座Aから⼝座Bへ10万円を振替送⾦
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼-10 WHERE ⼝座 = 'A';
(2) ⼝座Bの残⾼に10万円を⾜す
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼+10 WHERE ⼝座 = 'B';
⼝座 残⾼
A 20
B 5
銀⾏⼝座
⼝座 残⾼
A 10
B 5
銀⾏⼝座
(1)
ロールバック
例;振替送⾦
21
データベースダウン!
(1) ⼝座Aの残⾼から10万円を引く
⼝座Aから⼝座Bへ10万円を振替送⾦
UPDATE 銀⾏⼝座 SET 残⾼ = 残⾼-10 WHERE ⼝座 = 'A';
⼝座 残⾼
A 20
B 5
銀⾏⼝座
⼝座 残⾼
A 10
B 5
銀⾏⼝座
(1)
ロールバック
(1)の処理はなかったことに
Atomicity(原⼦性)
22
 トランザクションでのデータ操作は,すべてが
実⾏されているか,いずれも実⾏されていない
かのどちらかであるという性質
原⼦:事物を構成する最⼩単位
トランザクション:処理を構成する最⼩単位
ALL or NOTHING
トランザクションのもつべき特性
23
ACID特性
Atomicity
C
I
D
制約に従え
24
例;商品番号の変更
25
商品番号 商品名
110 ノートPC
250 外付けHDD
330 USBメモリ
420 ディスプレイ
伝票番号 商品番号 売上数
123 330 10
124 250 5
125 420 2
126 110 1
商品表 売上表
商品番号を330→340に変更
商品番号 商品名
110 ノートPC
250 外付けHDD
340 USBメモリ
商品番号420を削除
整合性がとれなくなる
復習
Consistency(整合性)を保証せよ
26
データベース全体で整合性を維持
整合性維持機能
27
商品番号 商品名
110 ノートPC
250 外付けHDD
330 USBメモリ
420 ディスプレイ
伝票番号 商品番号 売上数
123 330 10
124 250 5
125 420 2
126 110 1
商品表 売上表
商品番号 商品名
110 ノートPC
250 外付けHDD
340 USBメモリ
420 ディスプレイ
整合性を維持
340
売上表も変更商品番号を330→340に変更
商品番号420を削除
復習
Consistency(整合性)
28
 トランザクションが終了した時点では,データ
ベースの内容には⽭盾がなく,整合性(⼀貫
性)のある状態になっているという性質
トランザクションのもつべき特性
29
ACID特性
Atomicity
Consistency
I
D
⼀つ⼀つの処理を
隔離せよ
30
データベースの同時実⾏制御
31
データベース
(DB)
例;ホテルの部屋の予約(1)
32
部屋 残室数
シングル 5
空室状況
①残室数を確認
SELECT
5
②残室数を確認
ボブ キャロル
時
間
経
過 残室数が⼀つしか減らない
更新の喪失
SELECT
5
部屋 残室数
シングル 4
③部屋を予約
UPDATE
-1 ④部屋を予約
UPDATE
-1
部屋 残室数
シングル 4
例;ホテルの部屋の予約(2)
33
部屋 残室数
シングル 1
空室状況
①残室数を確認
SELECT
1
③残室数を確認
ボブ キャロル
時
間
経
過
空室があるのに
「空室なし」と
表⽰される
SELECT
0
部屋 残室数
シングル 0
②部屋を予約
UPDATE
-1
部屋 残室数
シングル 1
ROLLBACK
④キャンセル
ダーティリード
例;商品の在庫数
34
商品番号 在庫数
110 50
在庫
①在庫数を確認
SELECT
50
④在庫数を確認
時
間
経
過
同じ問合せを
連続で⾏ったのに,
結果が異なる
SELECT
30
商品番号 在庫数
110 30
③商品を出荷
UPDATE
-20
ノンリピータブルリード
②在庫数を確認
SELECT
50
例;成績の集計
35
学⽣番号 成績
1001 80
1002 62
1003 74
成績
③平均の算出
時
間
経
過
前の問合せではなかった
(幻の)タプルが出現
1004 84
②学⽣の追加
INSERT
ファントムリード
①平均の算出
SELECT AVG
72
SELECT AVG
75
直列化可能性
36
部屋 残室数
シングル 5
空室状況
①残室数を確認
SELECT
5
②残室数を確認
ボブ キャロル
時
間
経
過
SELECT
5
部屋 残室数
シングル 4
③部屋を予約
UPDATE
-1 ④部屋を予約
UPDATE
-1
部屋 残室数
シングル 4
直列化可能性
37
T1 T2
READ x READ x
x = x - 1
x = x - 1
WRITE x
WRITE x
READ:読込み
WRITE:書込み
初期値:x = 5
x = 4
T1
READ x
x = x - 1
WRITE x
T2
READ x
x = x - 1
WRITE x
初期値:x = 5
T2
READ x
x = x - 1
WRITE x
T1
READ x
x = x - 1
WRITE x
or
x = 3 x = 3このスケジュールは,
直列化可能でない
直列化可能な例
T1 T2
READ x
x = x - 1
WRITE x
READ x
READ y WRITE x
y = y - 1
WRITE y
READ y
y = y - 1
WRITE y
初期値:x = 5, y = 5 T1
READ x
x = x - 1
WRITE x
READ y
y = y - 1
WRITE y
or
T2
READ x
WRITE x
READ y
y = y - 1
WRITE y
T2
READ x
WRITE x
READ y
y = y - 1
WRITE y
T1
READ x
x = x - 1
WRITE x
READ y
y = y - 1
WRITE y
初期値:x = 5, y = 5
x = 4, y = 3 x = 4, y = 3x = 4, y = 3
このスケジュール
は直列化可能
Isolation(隔離性)を保証せよ
39
スケジュールを直列化可能にする
ロッキング
40
部屋 残室数
シングル 5
空室状況
(1) 残室数を確認
SELECT
5
(1) 残室数を確認
ボブ キャロル
時
間
経
過
SELECT
部屋 残室数
シングル 4
(2) 部屋を予約
UPDATE
-1
ロック
ロック時は
アクセス不可
1. データにアクセスする直前に
• ロックがかかっていなければロックする
• ロックがかかっていればアンロックされるまで待つ
2. データへのアクセスが終了した時点でアンロックする
ロッキング
(1) 残室数を確認
ボブ キャロル
時
間
経
過
SELECT
4
部屋 残室数
シングル 4
(2) 部屋を予約
UPDATE
-1
(2) 部屋を予約
UPDATE
-1
部屋 残室数
シングル 3
COMMIT
部屋 残室数
シングル 4
空室状況
ロック
ロッキングの問題点
42
 データを参照するだけでロックをかけると⾮効率
 並列性の低下
共有ロックと排他ロック
43
部屋 残室数
シングル 5
空室状況
(1) 残室数を確認
SELECT
5
(1) 残室数を確認
ボブ キャロル
時
間
経
過
SELECT
5
部屋 残室数
シングル 4
(2) 部屋を予約
UPDATE
-1
共有ロック
排他ロック
SELECT
5
OK
共有ロック
READ要求は許可するが,他の要求は許可
しないロック
– ユーザが読出し操作だけを⾏う場合にかける
44
共有ロック
書込み読出し
排他ロック
他のすべての処理要求を許可せず,⾃分だけ
で占有するロック
– ユーザが書込み操作を⾏おうとする場合にかける
45
排他ロック
書込み読出し
両⽴性⾏列
46
共有ロック 排他ロック
共有ロック
OK
排他ロック
トランザクション2が要求
トランザクション1
が要求
直列化可能性
T1 T2
LOCK x
READ x
x = x - 1
WRITE x
UNLOCK x
LOCK x
READ x
x = x - 1
WRITE x
UNLOCK x
READ:読込み
WRITE:書込み
初期値:x = 5
x = 3
T1
LOCK x
READ x
x = x - 1
WRITE x
UNLOCK x
T2
LOCK x
READ x
x = x - 1
WRITE x
UNLOCK x
初期値:x = 5
or
x = 3
LOCK:ロック
UNLOCK:アンロック
T2
LOCK x
READ x
x = x - 1
WRITE x
UNLOCK x
T1
LOCK x
READ x
x = x - 1
WRITE x
UNLOCK x
x = 3
このスケジュール
は直列化可能
Isolation(隔離性)
48
 トランザクション実⾏中の中間結果を他のトラ
ンザクションは⾒ることができないという性質
 同時に複数のトランザクションを実⾏した結果
と逐次実⾏した場合の結果は同じ
トランザクションのもつべき特性
49
ACID特性
Atomicity
Consistency
Isolation
D
直列化可能性を保証するために
50
T1
LOCK X
LOCK Y
READ X
X = X - 10000
WRITE X
READ Y
Y = Y + 10000
WRITE Y
UNLOCK X
UNLOCK Y
成⻑相
縮退相
ロックをかける相
ロックを解除する相
2相ロッキング
銀⾏⼝座X
銀⾏⼝座Y
¥10,000振込み
ボブ
銀⾏⼝座Yにアクセス
できるまで待機状態
ロックによる問題点
51
銀⾏⼝座Xにアクセス
できるまで待機状態
銀⾏⼝座X
銀⾏⼝座Y
¥10,000振込み
ボブによる排他ロック
¥5,000振込み
キャロルによる
排他ロック
ボブ キャロル
ロックによる問題点
52
T1 T2
LOCK X
LOCK Y
LOCK Y LOCK X
Yがアンロックされる
まで待機状態
Xがアンロックされる
まで待機状態
待機中…
デッドロック
複数のトランザクションが,他のトランザク
ションがロックしているデータが解除されるの
を待っていて,先に進めないでいる状態
デッドロックの検出
タイマーによる時間計測
待合せグラフによる検証
53
タイマーによる時間計測
54
 ロック待ち状態が⼀定時間以上続いた場合,
デッドロック状態と⾒なす
待合せグラフによる検証
55
T S
Sの終了を待っている
Tの終了を待っている
 トランザクションをノードとし,トランザクションTが
トランザクションSの終了を待っているときに,TからS
へのアークを設定することで作成されたグラフ
待合せグラフ
 待合せグラフ内にループが存在すれば,デッドロック
が発⽣していることがわかる
デッドロック発⽣時の対処法
 デッドロック状態にあるどちらかのロックを解
除(トランザクションを取り消す)
銀⾏⼝座X
銀⾏⼝座Y
¥10,000振込み
ボブによる排他ロック
ボブ キャロル
¥5,000振込み
キャロルによる
排他ロック
トランザクションのもつべき特性
57
ACID特性
Atomicity
Consistency
Isolation
D
トランザクションの
もつべき特性
同時実⾏制御の仕組み
まとめ
58
まとめ
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プロトコル チェックポイント マージ結合
アフタイメージ 中間ノード 待合せグラフ
⼊れ⼦結合 直接編成ファイル リーフノード
インデックス 直列化可能性 両⽴性⾏列
インデックスによる結合 データ部 ルートノード
インデックスファイル データベースダンプ レコード
基数変換法 データベースバックアップ ロールバック
共有ロック デッドロック ロールフォワード
更新の喪失 同時実⾏制御 ロギング
コミット トランザクション ログ(ジャーナル)
索引部 トランザクション障害 ログファイル
索引編成ファイル ノンリピータブルリード ロッキング
⾃乗・中央法 媒体障害 ロック
システム障害 排他ロック
シノニム ハッシュインデックス

データベース12 - トランザクションと同時実行制御