Open6

データベーススペシャリスト試験対策、RDBMS仕様まとめ

glassonion1glassonion1

午後1&2対策、RDBMS仕様の洗い出し

データベーススペシャリスト試験の午後問題はとにかく時間が足りない。物理データベース設計の問題には必ずRDBMS仕様の説明があり、仕様はパターン化されている。試験中に一から読んでいては時間が足りないので過去問から仕様を洗い出し試験中に読まなくてすむように対策をしておく

毎年午後1問2に[RDBMS の主な仕様]の記述がある

令和5年のみ変則で概念データモデルの問題が連続で出題されたが、基本毎年午後1問2に[RDBMS の主な仕様]の記述がある。

おすすめ参考書

増永 良文(著) リレーショナルデータベース入門
https://amzn.to/3Bzj8jR

glassonion1glassonion1

令和5年度 [RDBMS の主な仕様]

令和5年度のみ午後1問3

1. 行の挿入・削除, 再編成

  1. 行を挿入するとき 表領域の最後のページに行を格納する。 最後のページに空き領域がなければ, 新しいページを表領域の最後に追加し, 行を格納する。
  2. 最後のページを除き, 行を削除してできた領域は, 行の挿入に使われない。
  3. 再編成では, 削除されていない全行をファイルにアンロードした後, 初期化した表領域にその全行を再ロードし、併せて索引を再作成する。

2. 区分化

  1. テーブルごとに一つ又は複数の列を区分キーとし、 区分キーの値に基づいて表領域を物理的に分割することを, 区分化という。
  2. 区分方法には次の2種類がある。
    ・レンジ区分 :区分キーの値の範囲によって行を区分に分配する。
    ・ハッシュ区分: 区分キーの値に基づき, RDBMS が生成するハッシュ値によって行を一定数の区分に分配する。 区分数を変更する場合, 全行を再分配する。
  3. レンジ区分では, 区分キーの値の範囲が既存の区分と重複しなければ区分を追加でき, 任意の区分を切り離すこともできる。 区分の追加, 切離しのとき, 区分内の行のログがログファイルに記録されることはない。
  4. 区分ごとに物理的に分割される索引 (以下, 分割索引という)を定義できる。 区分を追加したとき、 当該区分に分割索引が追加され, また, 区分を切り離したとき,当該区分の分割索引も切り離される。

参照元

glassonion1glassonion1

令和4年度 [RDBMS の主な仕様]

1. 表領域

  1. テーブル及び索引のストレージ上の物理的な格納場所を,表領域という。
  2. RDBMS とストレージとの間の入出力単位を,ページという。 同じページに, 異なるテーブルの行が格納されることはない。

2. 再編成,行の挿入

  1. テーブルを再編成することで,行を主キー順に物理的に並び替えることができる。また,再編成するとき, テーブルに空き領域の割合 (既定値は30%)を指定した場合,各ページ中に空き領域を予約することができる。
  2. INSERT 文で行を挿入するとき, RDBMSは,主キー値の並びの中で, 挿入行のキ一値に近い行が格納されているページを探し, 空き領域があればそのページに, なければ表領域の最後のページに格納する。 最後のページに空き領域がなければ、新しいページを表領域の最後に追加し, 格納する。

参照元

glassonion1glassonion1

令和3年度 [RDBMS の主な仕様]

区分化=パーティショニング、索引=インデックス

1. アクセス経路, 区分化, 再編成

  1. アクセス経路は, RDBMS によって表探索又は索引探索に決められる。 表探索では, 索引を使わずに先頭ページから順に全行を探索する。 索引探索では, WHERE 句中の述語に適した索引によって絞り込んでから表の行を読み込む。
  2. テーブルごとに一つ又は複数の列を区分キーとし, 区分キーの値に基づいて物理的な表領域に分割することを区分化という。
  3. 区分方法にはハッシュとレンジの二つがある。 どちらも, テーブルを検索する SQL 文の WHERE 旬の述語に区分キー列を指定すると, 区分キー列で特定した区分だけを探索する。
    1 ハッシュは, 区分キー値を基に RDBMS が生成するハッシュ値によって一定数の区分に行を分配する方法である。
    2 レンジは, 区分キー値の範囲によって区分に行を分配する方法である。
  4. テーブル又は区分を再編成することによって, 行を主キー順に物理的に並び 替えることができる。 また, 各ページ中に指定した空き領域を予約することができる。
  5. INSERT文で行を挿入するとき, RDBMS は, 主キー値の並びの中で, 挿入行の主キー値に近い行が格納されているページに空き領域があればそのページに, なければ表領域の最後のページに格納する。 最後のページに空き領域がなければ、新しいページを表領域の最後に追加する。

2. データ入出力とログ出力

  1. データとログはそれぞれ別のディスクに格納される。 同じディスクに対し同時に入出力は行われないものとする。
  2. データ入出力とログ出力は4,000バイトのページ単位に行われる。
  3. データバッファはテーブルごとに確保される。
  4. ページをランダムに入出力する場合, SQL 処理中の CPU 処理と入出力処理は並行して行われない。これを同期データ入出力処理と呼び, SQL 処理時間は次の式で近似できる。
    SQL 処理時間 = CPU 時間 + 同期データ 入出力処理時間
  5. ページを順次に入出力する場合, SQL 処理中の CPU 処理と入出力処理は並行して行われる。これを非同期データ入出力処理と呼び, SQL 処理時間は次の式で近似できる。 ここで関数 MAXは引数のうち最も大きい値を返す。
    SQL 処理時間 = MAX(CPU 時間, 非同期データ入出力処理時間)
  6. 行を挿入, 更新, 削除した場合, 変更内容がログとしてRDBMSに一つ存在するログバッファに書き込まれる。 ログバッファが一杯の場合, トランザクションの INSERT文, UPDATE 文, DELETE 文の処理は待たされる。
  7. ログは,データより先にログバッファからディスクに出力される。 これをログ出力処理と呼ぶ。 このとき, トランザクションのコミットはログ出力処理の完了まで待たされる。 ログ出力処理は,次のいずれかの事象を契機に行われる。
    1 ログバッファが一杯になった。
    2 トランザクションがコミット又はロールバックを行った。
    3 あるテーブルのデータバッファが変更ページによって一杯になった。

参照元

glassonion1glassonion1

令和2年度 [RDBMS の主な仕様]

1. ISOLATION レベル

選択できるトランザクションの ISOLATION レベルとその排他制御の内容は,表1のとおりである。
ロックは行単位で掛ける。 共有ロックを掛けている間は,他のトランザクションからの対象行の参照は可能であり, 変更は共有ロックの解放待ちとなる。 専有ロックを掛けている間は,他のトランザクションからの対象行の参照, 変更は専有ロックの解放待ちとなる。

表1 トランザクションの ISOLATION レベルとその排他制御の内容

ISOLATION レベル 排他制御の内容
READ COMMITTED データ参照時に共有ロックを掛け, 参照終了時に解放する。
データ変更時に専有ロックを掛け, トランザクション終了時に解放する
REPEATABLE READ データ参照時に共有ロックを掛け, トランザクション終了時に解放する。
データ変更時に専有ロックを掛け, トランザクション終了時に解放する

2. レプリケーション機能

  1. 1か所のデータを複数か所に複製する機能, 複数か所のデータを1か所に集約する機能,及び両者を組み合わせて双方向に反映する機能がある。これらの機能を使用すると,一方のテーブルへの挿入・更新・削除を他方に自動的に反映させることができる。
  2. トランザクションログを用いてトランザクションと非同期に一定間隔でデータを反映するバッチ型と, レプリケーション元のトランザクションと同期してデータを反映するイベント型がある。
    1 バッチ型では,テーブルごとに, レプリケーションの有効化, 無効化をコマンドによって指示することができる。 無効化したレプリケーションを有効化するときには,蓄積されたトランザクションログを用いてデータを反映する。
    2 イベント型では,レプリケーション先への反映が失敗すると, レプリケーション元の変更はロールバックされる。
  3. 列の選択,行の選択及びその組合せによって, レプリケーション先のテーブル に必要とされるデータだけを反映することができる

参照元

glassonion1glassonion1

平成31年度 [RDBMS の主な仕様]

1. ISOLATION レベル

選択できるトランザクションの ISOLATION レベルとその排他制御の内容は, 表1のとおりである。 ただし, データ参照時に FOR UPDATE 句を指定すると, 対象行に専有ロックを掛け, トランザクション終了時に解放する。
ロックは行単位で掛ける。 共有ロックを掛けている間は,他のトランザクションからの対象行の参照は可能であり,更新は共有ロックの解放待ちとなる。 専有ロックを掛けている間は,他のトランザクションからの対象行の参照, 更新は専有ロックの解放待ちとなる。
表1 トランザクションの ISOLATION レベルとその排他制御の内容

ISOLATION レベル 排他制御の内容
READ COMMITTED データ参照時に共有ロックを掛け, 参照終了時に解放する。
データ変更時に専有ロックを掛け, トランザクション終了時に解放する
REPEATABLE READ データ参照時に共有ロックを掛け, トランザクション終了時に解放する。
データ変更時に専有ロックを掛け, トランザクション終了時に解放する

索引を使わずに, 表探索で全ての行に順次アクセスする場合, 検索条件に合致するか否かにかかわらず全行をロック対象とする。 索引探索の場合, 索引から読み込んだ行だけをロック対象とする。

2. トリガ

テーブルに対する変更操作 (挿入・更新・削除) を契機に、 あらかじめ定義した処理を実行する。

  1. 実行タイミング (テーブルに対する変更操作の前又は後。 前者を BEFORE ト
    リガ,後者を AFTER トリガという) を定義することができる。
  2. 列値による実行条件を定義することができる。
  3. トリガ内では, トリガを実行する契機となった変更操作を行う前と後の行を参照することができる。 挿入では操作後の行の内容を, 更新では操作前と操作後の行の内容を, 削除では操作前の行の内容を参照することができる。 参照するには,操作前と操作後の行に対する相関名をそれぞれ定義し, 相関名で列名を修飾する。
  4. BEFORE トリガの処理開始から終了までの同一トランザクション内では,全てのテーブルに対して変更操作を行うことはできない。
  5. トリガ内で例外を発生させることによって, 契機となった変更操作をエラーとして終了することができる。

参照元