データベース
第 5 回 トランザクション: アプリケーショ
ンの仕事の単位
鈴木幸市
データベース
第 5 回 トランザクション: アプリケーショ
ンの仕事の単位
鈴木幸市
今日の内容
トランザクションとは?
原子性 (Atomicity)
隔離性 (Isolation)
永続性 (durability)
データベース以外のトランザクション
データベースアプリケーションでのトランザクションの
指示
トランザクションの復習
アプリケーションの処理の単位
A さんの口座の残額を読む
振り込み額を A さんの口座から減額 B さんの口座の残額を読む
振込み額を B さんの口座に加える
トランザクションの
例 こ
の 途 中 で 止ま っ て は 困 る
止まったら最初 に戻ってほしい
無事ここまで処理できたら後で消 えてもらっては困る
データベースは上記ようにトランザクションの保護や取り消
しの機能を持っている
どこからどこまでがトランザクションかはアプリケーション
に教えてもらわないといけない
トランザクションの ACID 特性 ( 復習 )
トランザクションの持つべき重要な 4 つの特性
A (Atomicity)
トランザクションが中途半端に実行されないこと
C (Consistency)
データに矛盾が生じる書き込みをさせないこと
データに矛盾がないようにデータを格納できること
I (Isolation)
他のトランザクションが実行中であることを意識しな
いで処理できること
D (Durability)
一旦完了したトランザクションの結果はいかなること
があっても失ってはならないこと
実際には程度問題あり。天変地異があってもデータを守る
場合などは、コスト問題もある
トランザクションとは (1)
トランザクションとは、関連する複数の処理を一つの処理単位としてまとめたもの。 金融機関のコンピュータシステムにおける入出金処理のように、一連の作業を全体と して一つの処理として管理するために用いる。
トランザクションとして管理された処理は「すべて成功」か「すべて失敗」のいずれ かであることが保証される。例えば、資金移動システムをコンピュータで処理する場 合、出金処理と入金処理は「どちらも成功」か「どちらも失敗」のどちらかであるこ とが要求される。「出金に成功して入金に失敗」すると、出金された資金が宙に浮い てしまうからである。
IT 用語事典
トランザクションとは (2)
アプリケーションの処理の最小単位
これ以上分けられないものなので、次のい
ずれかにしかならない
トランザクションは「完全に」実行が完了する
( 成功 )
トランザクションが「全く」実行されていない
(失敗 )
実際は、データベースのソフトウェアが上
記を保証している。
成功した場合
結果は失われない。
失敗した場合
データはトランザクション実行前の状態に戻る
原子性
Atomicity
永続性
(Durability)
一貫性
(Consistency)
トランザクションの永続性
どんな時でも?
停電
データベースの自動リカバリ
ディスク装置破損
ディスクの交換、データベースのバックアップを使ったリカバリ
サーバ故障
サーバの交換、データベースのバックアップを使ったリカバリ
サーバルーム火災
サーバルームの復旧、遠隔地に保管しておいたバックアップを使ったリカバ リ
バックアップセンタを遠隔地にあらかじめ作っておいて、こちらで運転継続
地震によるビル倒壊
ビル復旧、遠隔地に保管しておいたバックアップを使ったリカバリ
バックアップセンタを遠隔地にあらかじめ作っておいて、こちらで運転継続
データベース以外の対策を事前に講じておく
どの程度の費用をかけるかにも依存する
トランザクションはアプリケーショ
ンが決める データベースで判断できないこと
どこからどこまでがトランザクションか
トランザクションは成功したのか失敗したのか (*1)
アプリケーションが教えてあげる必要がある
(*1) 内部エラーやアプリケーションのエラーは検出して強制的 Begin_Transaction;
( アプリケーションの処理 ) If (successful) {
Commit_Transaction; }Else {
Abort_Transaction; }
トランザクションの同時実行
複数のトランザクションが同時に実行される
時間
T1
T2
T3
T4
T5
T6
T7
全部途中で止まってしまったら手動復旧はとても無理。→原
子性
他のトランザクションが動いていることを考えながらアプリ
ケーションを書くのは大変。間違ったら他のトランザクション
他のトランザクションを考えてあげる?
他のトランザクションの邪魔をしないようにアプリケーションを
書くのは至難の業
間違ったら影響も大きい (他のトランザクションのデータを破壊する )
アプリケーションがデータベースを占有しているように ( 他
のトランザクションが動いていないように ) 見せる
データベースが面倒をみてあげている
隔離性
Isolation
ロックを使って隔離する
同時に同じデータを読み書きするときには、一方を待たせる (*1)
内部では「ロック」を使う
(*1) 読むときは待たせない方法もある (MVCC, 読取一貫性 )
T1
T2
(a) に書
く Commit
(a) に書
く
実はここまで待たせる。 これはデータベースが制 御する。
T1が a をロックして いる