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

61
データベース 第12回 トランザクションと同時実⾏制御 1 2015年6⽉25⽇(⽊) 7・8時限 担当:奥 健太

Upload: kenta-oku

Post on 08-Aug-2015

117 views

Category:

Education


0 download

TRANSCRIPT

データベース第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,000Y=¥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 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トランザクション

トランザクション

11

利⽤者からみたときの処理の単位

トランザクションのもつべき特性

同時実⾏制御の仕組み

本⽇の講義で学ぶこと

12

トランザクションのもつべき特性

13

ACID特性

ACID

成功か失敗か

14

例;振替送⾦

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)

10万円はどこへ消えた!?

17

⼝座 残⾼A 20B 5

銀⾏⼝座⼝座 残⾼A 10B 5

銀⾏⼝座(1)

Atomicity(原⼦性)を保証せよ

18

成功か失敗かコミットかロールバックか

例;振替送⾦

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

トランザクションのもつべき特性

23

ACID特性

AtomicityCID

制約に従え

24

例;商品番号の変更

25

商品番号 商品名110 ノートPC250 外付けHDD330 USBメモリ420 ディスプレイ

伝票番号 商品番号 売上数123 330 10124 250 5125 420 2126 110 1

商品表 売上表

商品番号を330→340に変更

商品番号 商品名110 ノートPC250 外付けHDD340 USBメモリ

商品番号420を削除

整合性がとれなくなる

復習

Consistency(整合性)を保証せよ

26

データベース全体で整合性を維持

整合性維持機能

27

商品番号 商品名110 ノートPC250 外付けHDD330 USBメモリ420 ディスプレイ

伝票番号 商品番号 売上数123 330 10124 250 5125 420 2126 110 1

商品表 売上表

商品番号 商品名110 ノートPC250 外付けHDD340 USBメモリ420 ディスプレイ

整合性を維持

340

売上表も変更商品番号を330→340に変更商品番号420を削除

復習

Consistency(整合性)

28

トランザクションが終了した時点では,データベースの内容には⽭盾がなく,整合性(⼀貫性)のある状態になっているという性質

トランザクションのもつべき特性

29

ACID特性

AtomicityConsistencyID

⼀つ⼀つの処理を隔離せよ

30

データベースの同時実⾏制御

31

データベース(DB)

例;ホテルの部屋の予約(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

このスケジュールは直列化可能

Isolation(隔離性)を保証せよ

39

スケジュールを直列化可能にする

ロッキング

40

部屋 残室数シングル 5

空室状況(1) 残室数を確認

SELECT5

(1) 残室数を確認ボブ キャロル

時間経過

SELECT

部屋 残室数シングル 4

(2) 部屋を予約

UPDATE-1

ロック

ロック時はアクセス不可

1.データにアクセスする直前に• ロックがかかっていなければロックする• ロックがかかっていればアンロックされるまで待つ

2.データへのアクセスが終了した時点でアンロックする

ロッキング

(1) 残室数を確認

ボブ キャロル

時間経過

SELECT4

部屋 残室数シングル 4

(2) 部屋を予約

UPDATE-1

(2) 部屋を予約

UPDATE-1

部屋 残室数シングル 3

COMMIT

部屋 残室数シングル 4

空室状況

ロック

ロッキングの問題点

42

データを参照するだけでロックをかけると⾮効率 並列性の低下

共有ロックと排他ロック

43

部屋 残室数シングル 5

空室状況(1) 残室数を確認

SELECT5

(1) 残室数を確認ボブ キャロル

時間経過

SELECT5

部屋 残室数シングル 4

(2) 部屋を予約

UPDATE-1

共有ロック

排他ロックSELECT

5

OK

共有ロックREAD要求は許可するが,他の要求は許可

しないロック– ユーザが読出し操作だけを⾏う場合にかける

44

共有ロック

書込み読出し

排他ロック他のすべての処理要求を許可せず,⾃分だけ

で占有するロック– ユーザが書込み操作を⾏おうとする場合にかける

45

排他ロック

書込み読出し

両⽴性⾏列

46

共有ロック 排他ロック共有ロック OK排他ロック

トランザクション2が要求

トランザクション1が要求

直列化可能性

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

このスケジュールは直列化可能

Isolation(隔離性)

48

トランザクション実⾏中の中間結果を他のトランザクションは⾒ることができないという性質

同時に複数のトランザクションを実⾏した結果と逐次実⾏した場合の結果は同じ

トランザクションのもつべき特性

49

ACID特性

AtomicityConsistencyIsolationD

直列化可能性を保証するために

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がアンロックされるまで待機状態

待機中…

デッドロック複数のトランザクションが,他のトランザクションがロックしているデータが解除されるのを待っていて,先に進めないでいる状態

デッドロックの検出

タイマーによる時間計測

待合せグラフによる検証

53

タイマーによる時間計測

54

ロック待ち状態が⼀定時間以上続いた場合,デッドロック状態と⾒なす

待合せグラフによる検証

55

T S

Sの終了を待っている

Tの終了を待っている

トランザクションをノードとし,トランザクションTがトランザクションSの終了を待っているときに,TからSへのアークを設定することで作成されたグラフ

待合せグラフ

待合せグラフ内にループが存在すれば,デッドロックが発⽣していることがわかる

デッドロック発⽣時の対処法 デッドロック状態にあるどちらかのロックを解

除(トランザクションを取り消す)

銀⾏⼝座X

銀⾏⼝座Y¥10,000振込み

ボブによる排他ロック

ボブ キャロル

¥5,000振込み

キャロルによる排他ロック

トランザクションのもつべき特性

57

ACID特性

AtomicityConsistencyIsolationD

トランザクションのもつべき特性

同時実⾏制御の仕組み

まとめ

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プロトコル チェックポイント マージ結合アフタイメージ 中間ノード 待合せグラフ⼊れ⼦結合 直接編成ファイル リーフノードインデックス 直列化可能性 両⽴性⾏列インデックスによる結合 データ部 ルートノードインデックスファイル データベースダンプ レコード基数変換法 データベースバックアップ ロールバック共有ロック デッドロック ロールフォワード更新の喪失 同時実⾏制御 ロギングコミット トランザクション ログ(ジャーナル)索引部 トランザクション障害 ログファイル索引編成ファイル ノンリピータブルリード ロッキング⾃乗・中央法 媒体障害 ロックシステム障害 排他ロックシノニム ハッシュインデックス