ホーム » スタッフ » 斉藤徹 » トランザクション処理

2009年12月
« 11月   1月 »
 12345
6789101112
13141516171819
20212223242526
2728293031  

最近の投稿(電子情報)

アーカイブ

カテゴリー

トランザクション処理

授業の進度を確認すると、説明が薄いのか予定より早く進んでいるし、後期レポート課題の 説明の後、トランザクション処理について解説する。

後期レポート課題

前期のレポート課題に引き続き、後期のレポート課題を以下のように説明した。

卒研のテーマや身の回りのデータをテーマに、データベースを設計せよ。 ただし、レポート作成に当たり、以下の点を行うこと。

  • 2つ以上のテーブルから構成されるデータベースであること。
  • ER図を描くこと
  • 業務仕様書を作成し、実体・関係を適切に選んでER図を描く。(トップダウン設計)
  • 第一正規形、第二正規形、第三正規形を満たすことが分かるような説明をすること。 (ボトムアップ設計)
  • そのデータベースをWebの実験環境にデータ数は少しでいいので実際に入力し、SQLの命令を実行すること。
  • そのSQLは、実際の業務のどういう場面で実行し、その結果をどう使うことになるかを説明すること。

課題にあたり、SQLで"CREATE TABLE"などの説明が不十分であったため、SQLite,Oracle のデータ型の宣言や特徴を解説を行う。Webのデータベース実験環境は、SQLite なので、 型対応が柔軟なので、もっと簡単な説明でよかったのかもしれない。

トランザクション処理

改めて、Atomicity/Consistency/Isolation/Durability (ACID特性)を説明した後、直列化可能性の 説明を行う。同時実行制御には、ロッキング方式と、時刻印方式(タイムスタンプ方式)がある。 ロッキング方式で、ロックされていると解除まで待たされる。ロックの粒度が大きいと、 広範囲にロックされて、待ち時間が増えてしまう。

ロック方式には、共有ロック(Shared Lock / Read Lock)と、専有ロック(exclusive Lock/Write Lock)があり、共有ロックは重複してロックができる。これにより、ロックで待たされる時間を軽減できるようになる。しかしながら、直列化可能スケジュールでないと、この方式でも更新異常となる。

この対応として、2相ロッキング方式があり、ロックをかける操作の成長相と、ロック解除の縮退相に分離する。ロック解除がはじまったらすべてのロックがはずれるまで待つ。

こういったロックによる排他制御を行う場合、自分がかけたロックの影響によって、自分の処理がロック解除待ちにならず、処理が停止してしまうことがある。これをデッドロックといい、避けることができない。データとトランザクションの間のロック関係を、資源グラフで管理し、資源グラフに周回が発生したら、デッドロック発生とみなす。デッドロックの防止のために、(a)ロックの一括獲得の方法や、(b)使用データに順序付けを行う方法や、(c)トランザクションに優先順序を与える方式などがある。