3.4 原子動作 Atomic Action トランザクション transaction 3.4.1 並行制御 3.4.2 回復処理 3.4.3, 3.4.4 原子コミット コンセンサスの応用 3.6.3 RAID トランザクション T1: Read(A, X1); Read(B, Y1); Y1 := Y1 + 50000; X1 := X1 – 50000; Write(A, X1); Write(B, Y1); T2: Read(B, X2); Read(A, Y2); Y2 := Y2 + 20000; X2 := X2 – 20000; Write(B, X2); Write(A, Y2); 50000 A 100000 B 100000 20000 Read(A, X1); Read(B, Y1); Y1 := Y1 + 50000; X1 := X1 – 50000; Write(A, X1); Write(B, Y1); 50000 A 50000 Read(B, X2); Read(A, Y2); Y2 := Y2 + 20000; X2 := X2 – 20000; Write(B, X2); Write(A, Y2); B 100000 20000 Read(A, X1); Read(B, Y1); Read(B, X2); Read(A, Y2); Y2 := Y2 + 20000; X2 := X2 – 20000; Write(B, X2); Y1 := Y1 + 50000; X1 := X1 – 50000; Write(A, X1); Write(B, Y1); Write(A, Y2); 50000 A 120000 B 150000 20000 ACID 原子性 Atomicity トランザクションの最後は,コミットかアボート コミット データ操作をデータベースに反映 アボート データ操作を取り消し 一貫性 Consistency 分離性 Isolation 持続性 Durability 3.4.1 並行制御 並行実行 パフォーマンスのため不可欠 分離性 Isolation 逐次的に実行されたようにみえること. 直列化 Serialization 分離性を実現すること 現在のモード 2相ロッキング 考えるコマンド 要 SLOCK 求 XLOCK SLOCK XLOCK 両立 競合 競合 競合 共有ロック XLOCK 排他ロック READ SLOCK,XLOCKが必要 WRITE XLOCKが必要 UNLOCK SLOCK,XLOCKが必要 SLOCK ルール UNLOCK以降は,SLOCK, XLOCKできない 2相ロッキングにおけるロックの数の 推移 Shrink(T1) ロックの数 T1 (a) Shrink(T2) T2 時間 XLOCK A; XLOCK B; Read(A, X1); Read(B, Y1); Y1 := Y1 + 50000; X1 := X1 – 50000; Write(A, X1); Write(B, Y1); UNLOCK B; XLOCK B; Read(B, X2); UNLOCK A; XLOCK A; Read(A, Y2); Y2 := Y2 + 20000; X2 := X2 – 20000; Write(B, X2); Write(A, Y2); ULOCK B; ULOCK A; うまくいく理由 TiとTjの順序が問題となる場合 TiとTjが同じデータ項目Aを操作 ただし,READ-READの場合はのぞく 規則により,Aへの操作順は Shrink(Ti) < Shrink(Tj)ならTi, Tjの順 Shrink(Ti) > Shrink(Tj)ならTj, Tiの順 Ti, Tjの少なくとも一方は,XLOCKが必要な点に注意 結局,Shrinkの順番で逐次的に実行された のと同じ 2相ロッキングの問題 1. デッドロック XLOCK A; Read(A, X1); XLOCK B; Read(B, Y1); ... XLOCK B; Read(B, X2); XLOCK A; Read(A, Y2); ... 2相ロッキングの問題 2. アボートした場合, WRITE後に,UNLOCK した項目を,他のトランザクションが読み出 している場合がある. 次のトランザクションもアボートしないといけな い READ ロックの数 時間 (a) 厳密2相ロッキング コミットしてから,UNLOCKする ロックの数 ロックの数 時間 (a) 時間 (b) 3.4.2 回復処理 故障した場合でも,データベースにトランザク ションを反映 Durability 主記憶上のキャッシュの問題 Write Write 主記憶 主記憶 Data ディスク Data 後でディス クに記録 ディスク Data 故障→不整合の可能性 Data 低性能 Write ログ 主記憶 Data Data Write … … ディスク Data redo, undo 故障→不整合の可能性 コミット済→リドゥ (redo) = 固定化 コミット前→アンドゥ (undo) = 無効化 ログが主記憶に保存された場合 Write ログ 主記憶 Data Data Write … … 後でディス クに記録 ディスク Data ログが消えてしまう WAL(Write Ahead Log)プロトコル Write ログ 主記憶 Data Write … … Data 2 ディスク Write … Data … 1 ログの先書き •コミット直前 → redoのため •コミット前の書出し → undoのため 3.4.3 原子コミット 複数サイト上での同一トランザクションの実行 全サイトが,コミットかアボートか一致しないと いけない トランザクション コミットかアボートを決定 P1 コミットかアボートを決定 P2 コミットかアボートを決定 P3 原子コミット プロセス={P1, P2, …} Pi (i=1,2,..): propose(vi), vi = Yes or No Pi (i=1,2,..): decide(wi), wi = Commit or Abort 条件 停止性 一律合意: wi = w j 正当性: wi = Commit ⇒ 全Piでvi = Yes 義務: 故障がないとき,全Piでvi = Yes⇒ wi = Commit 義務(非同期):故障が推測されなかったとき,全Piでvi = Yes⇒ wi = Commit 2相コミット すべてYes → コミット それ以外 → アボート トランザクション 投票要求 コミットかアボートを決定 P1 Yes or No P2 P3 Yes or No Phase 1 Phase 2 故障の場合1 トランザクション P1 P2 P3 ! No abort ! No abort タイムアウトしてアボート 故障の場合2 トランザクション 投票要求 P1 Yes or No ! アボートを決定 P2 abort P3 abort Phase 1 Phase 2 故障の場合3 トランザクション 投票要求 コミットかアボートを決定 P1 Yes or No P2 P3 commit/abort ! Yes Phase 1 Phase 2 コミット? アボート? P2に聞きに行くことが必要 ブロックされる場合 コミットかアボートを決定 投票要求 P1 Yes/No P2 P3 P4 P5 Yes ? Yes ? Yes 停止性がみたされない ? 非ブロッキング原子コミット 3相コミットプロトコル (by D. Skeen) 複雑 コンセンサスを用いたプロトコル コンセンサス問題を解くアルゴリズムがあると仮 定 コンセンサスを用いたプロトコル Yes/Noを全プロセ スに送信 P1 コンセンサス問題を 解く Commit/Abort P2 Commit/Abort P3 Commit/Abort Yes or No a. Noを受信,もしくは故障を推測 • propose(アボート) b. すべてYes • propose(コミット) Yes/Noを全プロセ スに送信 P1 コンセンサス問題を 解く Commit/Abort P2 Commit/Abort P3 Commit/Abort Yes or No a. Noを受信,もしくは故障を推測 • propose(アボート) b. すべてYes • propose(コミット) • 停止性 • 一律合意: wi = wj • 正当性: wi = Commit ⇒ 全Piでvi = Yes • 義務(非同期):故障が推測されなかったと き,全Piでvi = Yes⇒ wi = Commit 停止性:故障状況1 Yes/Noを全プロセ スに送信 P1 コンセンサス問題を 解く Commit/Abort P2 Commit/Abort P3 Commit/Abort Yes or No コンセンサス問題を 解くアルゴリズムが うまく動けばOK a. Noを受信,もしくは故障を推測 • propose(アボート) b. すべてYes • propose(コミット) 停止性:故障状況2 Yes/Noを全プロセ スに送信 P1 ! コンセンサス問題を 解く Commit/Abort propose (アボート) P2 P3 Yes or No propose (コミット) Commit/Abort Commit/Abort a. Noを受信,もしくは故障を推測 故障を(まちがっても • propose(アボート) よいので)推測できれ b. すべてYes ばよい • propose(コミット) 3.6.3 RAID (Redundant Array of Inexpensive Disks) Striping 記憶領域をStripeに分割し,複数のディスクに分散 させること 負荷の分散 低いコストでのFault Toleranceの実現 RAID-0 Striping Controller D0 D3 D1 D4 D2 D5 長所 アクセスの並列化による性能の向上 短所 Non-Fault Tolerance Usable Storage Capacity Percentage = 100% RAID-1 Mirroring Controller D0 D1 D0 D1 同一のデータをN台のディスクで保持 長所 高いFault tolerance (N-1台のfailure),高速な読み出し 短所 低い利用効率,低速な書き込み Usable Storage Capacity Percentage = 100/N % RAID-4 Controller D0 D3 D1 D4 D2 D5 P0~2 P3~5 N 長所 高い利用効率,高速な読み出し, Disk 1台のfaultをmask 短所 Parityディスクへのアクセスの集中による書き込みの低速化 Usable Storage Capacity Percentage = 100*(N-1)/N % RAID 5 Controller D0 D3 D1 D4 D2 P3~5 P0~2 D5 パリティを全ディスクに分散 長所 高い利用効率,高速な読み出し・書き込み, faultをmask Usable Storage Capacity Percentage = 100*(N-1)/N % Disk 1台の
© Copyright 2024 ExpyDoc