コンピュータ上にデータベースを構築するために必要な運用、管理のためのシステムおよびそのためのソフトウェア。
トランザクションとはデータベースの更新などを含む一つの作業単位。
コミットまたはロールバックをもって完結する。
トランザクションの正当性を担保するためにデータベース管理システムが機能として持たなくてはいけない特性。
原子性 | Atomicity | トランザクションの終了時点ですべての処理が完了しているか、まったく行われていないかのどちらかであること。 |
---|---|---|
一貫性 | Consistency | トランザクション処理が終了しているか否かに関わらず、データの関係性に矛盾がないこと。 |
独立性 (隔離性) |
Independence (Isolation) |
更新途中の複数のトランザクションがお互いに結果に影響を与えないこと。 |
耐久性 | Durability | トランザクションの完了後、障害などによってその内容が変化しないこと。 |
データベースは常に複数のトランザクションが発生することが想定される。
これらのトランザクションが並行処理される場合、後述されるような問題が発生することが考えられる。
二つのトランザクションがデータを読み込み、更新をかける際に相手の更新内容を取り込めないため、
更新が喪失してしまう現象。
※例
あるデータで任意の数を加算していく処理をトランザクションで実行する。
トランザクション
開始
読み込み:変数←値
処理:変数 + 20
書き込み:値=変数
コミット(終了)
※※2つのトランザクションが発生し、順次処理された場合。
トランザクションA
開始
読み込み:変数←100
処理:100 + 20
書き込み:値=120
コミット(終了)
トランザクションB
開始
読み込み:変数←120
処理:120 + 20
書き込み:値=140
コミット(終了)
※※2つのトランザクションが発生し、並列処理された場合。
参照整合性制約を無視して他のテーブルのカラムと一致させるカラムを変更してしまうこと。
同じタプルの別のテーブルと関数従属するカラムを別々のトランザクションで並列処理すると発生しうる。
※例
商品の配送において担当者と配送時間の変更が同時に発生する。
担当者 | シフト |
---|---|
鈴木 | 午前 |
鈴木 | 夜間 |
佐藤 | 午前 |
佐藤 | 午後 |
商品 | 配送希望時間帯 | 担当者 |
---|---|---|
本 | 午前 | 佐藤 |
商品 | 配送希望時間帯 | 担当者 |
---|---|---|
本 | 午後 | 鈴木 |
並行処理するトランザクションが、もう一方の部分的な更新を読み込んでしまうこと。
トランザクションの隔離性が十分に担保されていない場合に発生する。
トランザクションが長時間データを占有してしまうと、データ運用に支障をきたすため、
やむを得ずACID特性の水準を下げる必要がある場合がある。
このような場合に生じる問題で、後述する同時実行制御で問題の回避に当たる必要がある。
トランザクションにおいて、テーブルやレコードなどに対するアクセスにロックをかけ、
並行処理のスケジュールを直列的にするものを排他制御と呼ぶ。
ロック粒度とはロックをかけるデータリソースをデータベース全体、テーブル、レコードなどの
どの単位でロックをかけるかを指す。
ロックの粒度が大きいとロックをかけたトランザクションがロックを開放するまで他のトランザクションは
データリソースにアクセスできず、待ち時間が発生する。結果、スループット*やターンアラウンドタイム*は低下する。
一方でロック粒度が小さいと待ち時間は少なくなるが、ロックの管理に必要な処理があるため
DBMSの オーバーヘッド
*は増大する。結果、スループットやターンアラウンドタイムは低下する。
このためロック粒度はデータベースサーバの性能やどのデータリソースにアクセスするかで
判断して決めていかなければならない。
ロックの種類の中でも、データベース全体やテーブルなどロック粒度の大きいロックをさす。
ロック粒度で述べた問題のほか、実際の処理の中では完全にデータリソースをロックするまでにタイムラグが生じ、
ロック対象のデータリソースに対するロック取得が間に合わないまま、他のトランザクションに更新される問題がある。
物理ロックの中でもデータリソースを完全に専有し、他のトランザクションに対して参照も更新も認めないもの。
更新を認めないが参照は認める物理ロック。共有ロックされたデータリソースは専有ロックできない。
SQLなどを利用することで特定のレコードを指定してロックをかけるもの。ロック粒度は小さくなる。
複数のデータリソースに対し、一斉にロックをかけて(第1相目)、データ操作後に一斉にロックを解く(第2相目)ロック方式。デッドロックが発生する可能性がある。 2相ロック以外のロック方式としてデータリソースを順番にロックしていく規約方式がある。 デッドロックは発生しなくなるが、並列処理性が下がるため、あまり採用されない。
並列処理下で複数のトランザクションがリソースをロック開放しながら互いに相手のロック解放を待っている状態のこと。
回避する方法として、ロック時間に制限を設け、一定時間たつとエラーとみなしてロールバックするか、
他のトランザクションがすでにリソースをロックしていた場合、ロールバックしてリトライするなどのやり方がある。
トランザクションのACID特性と並列実効性を担保することは二律背反の関係にあり、
2相ロック方式でデットロックを完全に回避することは不可能。
ACID特性の一つである一貫性を4段階のレベルに分類し、一貫性の度合いを調整することで
ACID特性を維持しつつもデットロックの発生や待機時間を軽減する。
トランザクションの隔離性のレベルを設定することでACID特性を維持しつつもデットロックの発生や待機時間を軽減する。
DBMSにおけるリモートプロシージャコール*の実装。
これを利用することにより、DBMSのクライアントはデータ操作をプログラムしなくてもあらかじめコーディングされたストアドプロシージャを実行することでデータ操作が可能になる。
ストアドプロシージャを利用することの利点には以下のようなものがあげられる。
システムカタログとも呼ばれる、3層スキーマアーキテクチャの実装。
データ定義情報(メタデータ)を保持し、これによりテーブル名、カラム名などの名前解決や各リソースの定義情報を格納する。