「トランザクション処理」カテゴリーアーカイブ

【応用情報・基本情報】
・データベースの排他制御,障害回復の考え方,仕組みを修得し,応用する。
・トランザクション管理,アクセス効率向上のための考え方を修得し,応用する。
・データに対するアクセス制御の必要性,代表的なアクセス権限を修得し,応用する。

【ITパスポート】
・データベースの処理方法を理解する。

トランザクション処理

情報処理技術者試験での学習内容

【応用情報・基本情報】
・データベースの排他制御,障害回復の考え方,仕組みを修得し,応用する。
・トランザクション管理,アクセス効率向上のための考え方を修得し,応用する。
・データに対するアクセス制御の必要性,代表的なアクセス権限を修得し,応用する。

【ITパスポート】
・データベースの処理方法を理解する。

(1)排他制御 ITパスポート 基本情報 応用情報

データの整合性を保つために,複数のトランザクションが同時にデータベースのデータを更新することが起こらないようにする排他制御の考え方を理解する。また,ロック方式,セマフォ方式,コミット制御の仕組みを理解する。

用語例:専有ロック,共有ロック,ロック粒度,デッドロック,1 相コミットメント,2相コミットメント

(2)障害回復 ITパスポート 基本情報 応用情報

障害に備えたバックアップの方式,世代管理の考え方,障害発生直前の状態まで回復を図るリカバリ処理の仕組み,データベースの利用環境の準備,アクセス効率の向上のための再編成などの考え方,仕組みを理解する。

用語例:フルバックアップ,差分バックアップ,増分バックアップ,ダンプファイル,リストア,データディレクトリ,ジャーナルファイル(ログファイル),チェックポイント,ロールフォワード,ロールバック,ウォームスタート,コールドスタート

(3)トランザクション管理 基本情報 応用情報

データベースは複数の利用者が同時にアクセスするので,トランザクション処理にはACID特性が求められること,四つの特性の意味を理解する。

(4)データベースの性能向上 基本情報 応用情報

データベースへのアクセス効率向上のために,インデックスを有効に活用する考え方を理解する。

用語例:インデックス数,負荷,ユニークインデックス,クラスタ化インデックス

(5)データ制御 基本情報 応用情報

利用者ごとに,データに対するアクセス制御を行う必要性があること,アクセス権限としてはデータベースに接続する権限,データを検索する権限,データを新規登録する権限,データを更新する権限などがあることを理解する。

用語例:参照権限,挿入権限,削除権限

 

排他制御

この記事での学習内容 ITパスポート 基本情報 応用情報

データの整合性を保つために,複数のトランザクションが同時にデータベースのデータを更新することが起こらないようにする排他制御の考え方を理解する。また,ロック方式,セマフォ方式,コミット制御の仕組みを理解する。

用語例:専有ロック,共有ロック,ロック粒度,デッドロック,1 相コミットメント,2相コミットメント

排他制御

DBMSはデータの矛盾を防止するため、排他制御によるアクセスタイミングのコントロールを行います。一つのファイルに対して、一つのトランザクション(取引単位)による更新処理中に、別のトランザクションが更新を行うことを禁止し、先の更新処理が完了しなければ、次の更新処理ができないようにします。

占有ロック

占有ロックとは、一つのファイルへのアクセスを一つのトランザクションだけに専有させて、他のトランザクションのアクセスを禁止することです。つまり、データの更新に対しても、参照に対してもロックを掛けます。先に占有ロックがかかっていた場合、後から占有ロックを掛けることができません。

共有ロック

共有ロックは、一つのファイルへのアクセスを複数のトランザクションに許可して、占有ロックを禁止することです。共有ロックは、共通の参照ファイルなどに用います。

先に占有ロックがかかっていた場合、後から共有ロックはかけることができませんが、先に共有ロックがかかっていた場合、後から共有ロックをかけることはできます。

ロック粒度

ロック粒度とは、ロックで保護するデータの細かさの度合いです。

粒度が粗いということは、保護するデータの単位が大きいということです。ロックのオーバーヘッドは減るという特徴がある一方で、アクセスを禁止される確率が高くなり、アクセス可能になるまで待つことから、性能が低下しがちです。

粒度が細かいということは、保護するデータの単位が小さいということです。アクセスを禁止される確率が低いので、性能が高いのが特徴ですが、ロックのための処理の回数が増えてオーバーヘッドが増えます。

デッドロック

デッドロックとは、複数のプロセスが相手が専有している資源の解放を待って、どちらの処理も停止してしまうことです。

対処法としては、以下の方法があります。

  • 更新プロセスの開始時に、表単位でロックをかける。
  • 更新プロセス開始時に、更新対象の全レコードにロックをかける。
  • 全てのプロセスで、更新処理を行う順序を合わせる。

コミットメント

あらゆる事態に対応するために、DBの更新は”仮”の状態で行われ、いつでももとに戻せるようにしておくのが一般的です。
*元に戻すことをロールバックという。

また、仮の更新結果は他のトランザクションからは見えません。

コミットメント(コミット)は、仮の更新を確定させる処理のことを指します。コミットが完了してはじめて、他のトランザクションからも更新後の値が参照できるようになります。

1相コミットメント

1相コミットメントとは、1回の処理でデータベースの更新が確定(コミット)する方式です。単相コミットメントとも呼ばれます。

単一のデータベースだけで運用されている場合に利用されたりしますが、データベースが複数関係し分散された環境で運用される場合、1相コミットメント方式では、データベース間に矛盾が生じるリスクがあるため、後述の2相コミットメント方式が採用されています。

2相コミットメント

2相コミットメント方式では、データベースの更新を「更新準備」と「更新」の2回のフェーズに分けて処理します。この方式は、ネットワークなどを利用し、分散されたデータベースが複数ある場合、1相コミットメント方式では複数のデータベースの更新が正常に終了できない場合があります。

確実に全てのデータベースの更新を行うには、分散されたデータベースの更新準備が全て整ってから更新を行えば、すべてのデータベースの更新が行えることになります。このように、更新準備フェーズと更新フェーズの2相にする方式を、2相コミットメントと呼んでいます。

もし、更新準備は終わり、更新フェーズに入ってから何らかの障害にて更新が行えなかった場合は、ロールバック処理を全てのデータベースに対して行うことで、更新前の状態にデータベースを戻すことができます。

障害回復

この記事での学習内容 ITパスポート 基本情報 応用情報

障害に備えたバックアップの方式,世代管理の考え方,障害発生直前の状態まで回復を図るリカバリ処理の仕組み,データベースの利用環境の準備,アクセス効率の向上のための再編成などの考え方,仕組みを理解する。

用語例:フルバックアップ,差分バックアップ,増分バックアップ,ダンプファイル,リストア,データディレクトリ,ジャーナルファイル(ログファイル),チェックポイント,ロールフォワード,ロールバック,ウォームスタート,コールドスタート

リカバリ機能

データベースの障害回復処理には、ロールフォワードとロールバックがあります。

ロールフォワード

最新のバックアップファイルを書き戻した後、ジャーナルファイルの更新後の情報を用いて、バックアップ時点から障害直前の状態まで更新を進める方法です。

ディスクの破損など、大きな障害が置きた場合に行います。

  1. ディスク障害などでデータベースが停止
  2. 障害が発生したディスクなどの媒体を復旧する
  3. バックアップファイルを元にデータを書き戻す
  4. ジャーナルファイルで、バックアップファイル取得後の更新情報を反映する

ロールバック

ジャーナルファイルを使って、障害が発生する前の状態に戻す復旧方法です。

  1. 更新前のレコード内容をジャーナルファイルに保存し、レコードの内容を書き換えます。
  2. 書き換えが完了したら、更新後の状態をジャーナルファイルに保存して、更新処理を終了します。
  3. 障害により更新処理が中断された場合には、更新前のデータを元にレコードを更新前の状態に戻し、更新処理を終了します。
ジャーナルファイル

ジャーナルファイルとは、更新前ジャーナル、更新後ジャーナル、更新時刻、トランザクション識別子などを記録する、データベースの更新履歴です。

チェックポイント

チェックポイントとは、障害に備えて障害回復に必要な情報をジャーナルファイルに記録するというバックアップの時点です。チェックポイントを頻繁に設けると障害回復は正確に近くなりますが、ジャーナルファイルに記録するオーバーヘッドが増えます。

ウォームスタート方式

ウォームスタート方式は、チェックポイントまで戻って、更新情報の記録を用いてデータベースを回復します。

  1. ジャーナルファイルを用いて、最新のチェックポイントの状態に戻す。
  2. チェックポイント以降のトランザクションのうち、障害発生前にコミットした分をロールフォワードして、更新を反映。
  3. 障害発生前にコミットしていない分はロールバックして整合性を確保した後でトランザクションを再実行。

ウォームスタート方式は、例えば通信障害などでロランザクションが寸断されたケースなどから復旧する場合に用います。

コールドスタート方式

コールドスタート方式とは、データベースの状態をすべてクリアして、データベース全体のバックアップファイルを用いて、データベースを回復します。

バックアップファイルの作成や回復に時間がかかるため、もとに戻る時点を頻繁には設けられません。

  1. ハードウェアを交換する。
  2. バックアップを用いて、データベースをバックアップ時点の状態の戻す。ジャーナルファイルが破損している場合は、バックアップを元にジャーナルファイルも復旧させる。
  3. データベースのバックアップ以降にコミットしたトランザクションのうち、ジャーナルファイルに更新後情報がある分をロールフォワードして更新を反映する。

コールドスタート方式は、ディスクの故障などハードウェアに障害が発生した場合などに用います。

 

トランザクション管理

この記事での学習内容 基本情報 応用情報

データベースは複数の利用者が同時にアクセスするので,トランザクション処理にはACID特性が求められること,四つの特性の意味を理解する。

ACID特性

ACID特性とは、トランザクション処理に対して、データベースに求められる4つの特性のことです。データベースには複数のユーザが同時にアクセスするので、注意が必要になります。

  • Atomicity: 原始性
  • Consistency: 一貫性
  • Isolation: 分離性
  • Durability: 耐久性
原始性(Atomicity)
一つのトランザクション処理が完全に実行されるか、そうでなければ元の状態に戻るという性質。これがないとデータベースが回復困難な状態になります。
一貫性(Consistency)
矛盾のない条件で表されるデータベースの整合性が、一つのトランザクション処理の前でも後でも保たれているという性質。
独立性(Isolation)
一つのトランザクション処理が、他のトランザクション処理に影響されないこと。
耐久性(Durability)
一つのトランザクション処理が完了したら、その結果は記録されること。これが保証されないと、障害発生時にデータベースが回復困難な状態になります。

 

 

データベースの性能向上

この記事での学習内容 基本情報 応用情報

データベースへのアクセス効率向上のために,インデックスを有効に活用する考え方を理解する。

用語例:インデックス数,負荷,ユニークインデックス,クラスタ化インデックス

インデックスの活用

データベースのインデックス(索引)は、本体となるデータ群の他に、検索を早めるために設けられたデータ群です。

インデックスは、キーとその存在1の一覧であり、本体となるデータ群の配置順をたどる必要が無いので、データベースの性能を向上させます。

インデックスを活用すると高速になるのは、インデックス表作成時にハッシュ表やB木など、高速に探索できるためのデータ構造をDBMS側で作成しているため、インデックスを活用すると高速に検索が出来るようになります。

複合インデックス

複数の項目の値を条件に検索するようなデータ操作をしばしば行う場合に、複数の項目に対して一つのインデックスを設定することです。

インデックス作成時の注意事項

インデックス作成時には、以下のような点に注意が必要です。

  • 絞込効果が小さい項目に設定すると効果が薄い。(例えば、名簿における性別や血液型)
  • データを更新すると、インデックスも更新されるので、更新頻度が多い表にインデックスを作成すると更新速度が低下する。
  • 絞込の効果が高く、検索キーとして使われる項目に対して、インデックスを作成するのが望ましい。

 

 

データ制御

この記事での学習内容 基本情報 応用情報

利用者ごとに,データに対するアクセス制御を行う必要性があること,アクセス権限としてはデータベースに接続する権限,データを検索する権限,データを新規登録する権限,データを更新する権限などがあることを理解する。

用語例:参照権限,挿入権限,削除権限

アクセス権限

アクセス制御とは、どのユーザがどのデータにアクセスできるかという権限(アクセス権限)を決めることです。

以下のような種類のアクセス権限があり、データ制御言語を用いることで設定されたり、チェックされたりします。

  • 接続権限: データベース又はスキーマに接続する権限
  • 検索権限: データを検索する権限
  • 登録権限: データを新たに追加する権限
  • 更新権限: 既存のデータを変更する権限
  • 削除権限: 既存のデータを削除する権限
  • 使用権限: スキーマや関数などのオブジェクトを使用する権限