データベース管理システム(データベース)
学習のポイント
データベース管理システムの「データベース制御」について学習します。トランザクションとACID特性(アジッド特性)、コミット・ロールバック・ロールフォワード、排他制御とロック・デットロック、2相コミットメント、ストアドプロシージャについて理解しましょう。
1. データベース管理システム(DBMS) | |
「DBMS」とは、「データベース管理システム」とも言います。これは、ユーザとデータベースの間に介在してデータベースの利用を支援するものです。以下の機能があります。 ●データベースの定義 ●デーベース操作 ●データベース制御 データベース管理システムでは、「ひとかたまりの処理」を「トランザクション」といいます。例えば、Aさんへ10000円を振り込む場合を考えてみましょう。 1. 自分の口座から10000円金額を減算する 2. Aさんの口座へ10000円を加算する この2つの処理は、両方完結しないと大変なことになってしまいます。上記の1と2を併せて1つのトランザクションということになります。 トランザクションが持つべき特性を表したものが「ACID特性(アジッド特性)」です。以下の4つの特性があります。
●A(Atomicity 原子性) |
|
2. コミット・ロールバック・ロールフォワード | |
トランザクションを実行するにあたっては、以下の5つの項目を把握する必要があります。
●コミット ●T1…何の問題もなく結果が保証されます。T1は,チェックポイントでデータファイルに同期済みのため,再起動時に何の処理も行う必要がありません。 ●T3とT5…時刻Tmでトランザクションが実行中だったT3とT5は、再起動時にロールバックによって「なかったこと」とされてしまいます。ログファイルが完全ではないためロールフォワードもできないので,ユーザが手動で再実行するしかありません。 ●T2とT4…この2つは,障害前にトランザクションが終了しているため,結果は保証の対象となります。ただし,T1と違って,チェックポイントより後にもトランザクションが実行されているため,データファイルはまだ同期されていません。変更履歴が残っているのはログファイルだけですので,「再起動時にロールフォワードが実施されます」。 |
|
3. 排他制御 | |
あるデータベースで1つのデータ資源を複数の異なるトランザクションがほぼ同時に更新しようとした場合に、「排他制御」が必要となります。
例えば、田中さんの銀行口座の残高が5万円だっ場合、1万円の入金処理Aと2万円の入金処理Bという2つのトランザクションがあったとします。トランザクションAの処理の途中で、トランザクションBの処理が完了した場合、最後にトランザクションAでの1万円の加算処理がなされ、結果として、6万円の残高となってしまいます。これを「ロストアップデート」といいます。このようなことがないようにDBMSには、排他制御という機能があります。排他制御とは、あるトランザクションが実行中、他のトランザクションが入ってこないようにすることです。以下の2種類の方法があります。
この方法には以下のものがあります。
●専有ロック 排他制御によって、データの矛盾はなくなりますが、やっかいな現象が起きる場合があります。それが「デッドロック」という「お互いに相手の資源解放の待ち状態」になることです。 例えば、トランザクションAは、資源Xにロックをかけ、トランザクションBは、資源Yにロックをかけた場合、トランザクションAは、資源Yを利用したい、トランザクションBは、資源Xを利用したい、という現象が発生した場合、互いのロックの解除の待ち状態になってしまいます。デットロックが発生した場合は。いずれかのトランザクションを強制終了させて再実行するようにします。 |
|
4. 2相コミットメント | |
口座Aを管理しているデータベースと口座Bを管理しているデータベースがあった場合、2箇所に分散しています。このような場合は、両方のデータベースから準備完了の応答があった時のみ、両方に対してコミット指示を出します。どちらか一方でもエラー応答があった場合は、両方に対してロールバック指示を出します。
・とりあえず各データベースを更新し、結果報告をする(第1相) この方法は、「すべてが確実に更新を反映された状態」と「すべてが何もなかった状態」のどちらかになります。 |
|
5. ストアドプロシージャ | |
ストアドプロシージャとは、データベースに対する一連の処理をまとめ、データベース管理システムに保存したもので、クライアントから引数を渡してそれに基づいて処理を行ったり、クライアントに処理結果を返したりすることもできます。 通常のようにSQL文と違い、ネットワークのトラフィックを削減でき、サーバ上で構文解析や機械語への変換を前もって終わらせておくため、処理時間の軽減にもつながります。 | |
6. データベースの再編成 | |
データベースに対して、登録・更新・削除を繰り返していると、ディスクの記憶領域に細かい空き領域がたくさん発生してしまい、処理効率が低下してしまいます。このように空き領域を整理することを「再編成」といいます。 | |
7. オプティマイザ | |
SQL文を高速に実行するために、最も効率の良いアクセスパス「表から目的のデータを取り出す経路」を選択するDBMSの機能のこと。 | |
8. クエリの実行までの流れ | |
DBMSがSQL文で記述されたクエリ(問合せ)を実行する手順は以下のようになります。
1. 構文解析…SQL文の文法のチェックを行う。 |