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

465 views

Published on

立命館大学 情報理工学部
「データベース」講義スライド
第12回:トランザクションと同時実行制御

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
465
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

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

×