Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データベースと応用システム:トランザクション管理

 データベースと応用システム:トランザクション管理

More Decks by 自然言語処理研究室

Other Decks in Education

Transcript

  1. (c)長岡技術科学大学 電気系 2 トランザクションとは何? • データベースでの処理単位 • 例えば、銀行振込を考えると、 – 預金口座Aから出金して、

    – 預金口座Bに入金する という処理で一つのトランザクションとなる。 • データベースを処理する際には、トランザクション単 位で成功、または失敗を保証する必要がある – 出金だけして中断、という状態は絶対に許されないの で直ちに入金するか、出金を取り消す(返金)必要が ある
  2. (c)長岡技術科学大学 電気系 3 ACID特性 トランザクションは以下の4特性を満たす必要がある: • 原子性(atomicity) – 全部実行 or

    全部不実行で終了 • 一貫性(consistency) – 整合性が取れていて矛盾がない • 独立性(isolation) – 複数のトランザクションを同時実行するのと順次実行す るので結果が同じになる • 耐久性(durability) – 障害があってもトランザクションの結果が残る
  3. (c)長岡技術科学大学 電気系 4 コミットメント制御 原子性を確保するための下記機能のこと。 • コミット(commit) – トランザクション処理が成功した場合に、その結果を確 定させること

    – 実行したすべての更新が反映される • ロールバック(rollback) – トランザクション処理が失敗した場合に、その結果を反 映させないこと – 実行したすべての更新が取り消される
  4. (c)長岡技術科学大学 電気系 7 ロック • アクセス対象となるデータを他のトランザクション からアクセスできなくすること • ロックの粒度 –

    レコード、ページ、テーブル、データベースなど – 細かくロックすれば実行可能なトランザクションが増え る – 大きくロックすればロックの制御が容易になる
  5. (c)長岡技術科学大学 電気系 8 ロックのタイプ • 共有ロック – 別名リードロック。データを読む前に実施。 – 他の共有ロックを許す(=読み込みを許す)

    – 占有ロックは許さない(=書き込みさせない) • 占有ロック – 別名ライトロック。データを書く前に実施。 – 共有ロックを許さない(=読み込みを許さない) – 他の占有ロックを許さない(=書き込みさせない)
  6. (c)長岡技術科学大学 電気系 9 2相ロックプロトコル • データ読み書きの前に、関係資源に対して一斉に ロックをして、 – 書き込みだけでなく、読み込みにもロックする •

    操作がすべて終了後(コミットorロールバック後)に のみ、一斉にアンロックをする方式 – 1トランザクションでロックとアンロックは1回のみ。アン ロック後に何かをロックすることは許されない。 利点:直列可能性が保証される 欠点:デッドロックを防止できない
  7. (c)長岡技術科学大学 電気系 10 デッドロック(dead lock) • 双方のトランザクションが他方に必要なデータを ロックして、それ以上処理が進まなくなること • 例:二つの預金口座AとBについて、

    – AからBに振り込むためにAから出金 – BからAに振り込むためにBから出金 これを同時に行った場合、どちらの口座もロックが かかっているため書き込みができず、デッドロック 状態になる。
  8. (c)長岡技術科学大学 電気系 12 デッドロックの検出と解除 • 検出 – タイムアウト:一定時間ロック待ちになっているトランザ クションを探し出す方法 –

    待ちグラフ:相互依存関係を検出する方法 • 解除 – デッドロックを起こしているトランザクションの一つ(以 上)をアボート(中止)する
  9. (c)長岡技術科学大学 電気系 13 時刻印(timestamp) • トランザクションの開始時刻を記録 • アクセスが競合した時は先に開始したトランザク ションを優先する方法 •

    利点: – デッドロックが発生しない • 問題点: – 更新中のデータを他のトランザクションから参照 されてしまう
  10. (c)長岡技術科学大学 電気系 14 楽観的排他制御 • 更新予定のデータに対する更新前の値を保持 • 更新時に、他のトランザクションがそのデータを更 新していないことを確認してからデータ更新 •

    逆に更新されていたらロールバック • トランザクション間でアクセスの競合が少ない場合 を想定した方式 • デッドロックが発生しない
  11. (c)長岡技術科学大学 電気系 17 repeatable read • 繰り返し同じデータを読み取っても、同じ内容であ ることを保証するレベル • 「ファントムリード」が発生する

    – T1が問い合わせをした – その直後にT2が新商品の登録(コミット)をした – これによってT1の前回問い合わせ時に存在しないものが 出現する
  12. (c)長岡技術科学大学 電気系 18 read committed • コミットされたもののみを読み取ることができるレベ ル • 他のトランザクションのコミット前のデータは読み取

    れない • ファントムリードの他に、新たに「ノンリピータブル リード」が発生する – T1が在庫数の問い合わせをした – その直後に、T2が在庫数の更新をした – T1が同じ問い合わせをしても同じ結果が保証できない
  13. (c)長岡技術科学大学 電気系 19 read uncommitted • 他のトランザクションのコミット前のデータも読み取 ることができるレベル • ファントムリード、ノンリピータブルリードの他に、新

    たに「ダーティーリード」が発生する – T1がデータをAからBに更新したが、まだコミットしてい ない – T2が同じデータを問い合わせたので、未確定のデータ Bを戻した
  14. (c)長岡技術科学大学 電気系 20 isolation levelとデッドロックの関係 • read uncommitted では、デッドロックはほとん ど発生しない

    – ほとんど何もロックをかけないため • それ以外の3レベルではデッドロックが起こる