データベーススペシャリスト 2019年 午前2 問02
問題文
次のチェックポイントの仕様に従ってトランザクション処理を行うDBMSにおいて、チェックポイントの発生頻度は1時間当たり何回か。ここで、トランザクションは毎秒20件発生し、1トランザクションごとに消費されるデータベースバッファ領域のデータ量及びログファイルに書き出すログ長はどちらも10kバイトとする。データベースバッファ領域の容量は480Mバイトとし、一つのログファイルのサイズは240Mバイトとする。1Mバイト=103kバイトとする。開始時点では、データベースバッファ領域、ログファイルともに初期化状態であるとする。DBMSは、ログファイルを二つもち、一方を使い切ったら他方に切り替え、使い切った一方をアーカイブして初期化する。ログファイルへの書込み処理はWALプロトコルに従う。
〔チェックポイントの仕様〕
1.チェックポイントが発生する条件
A.データベースバッファ領域に空きがなくなったとき、又は
B.ログファイルが切り替わるとき
2.チェックポイント終了時のデータベースバッファの状態
データベースバッファ領域は、データベースファイルへの反映後、初期化される。
選択肢
ア:1.5
イ:2
ウ:3(正解)
エ:6
🔒 解説は解答すると表示されます
チェックポイント発生頻度【午前2解説】
正解の理由
トランザクションによるログ書込みとバッファ消費はどちらも毎秒 の速度で進みます。ログファイル切替の条件は「一つのログファイルを使い切ったとき」であり、1ファイル当たりの容量が と定められているため、ログファイルの切替間隔は
となります。チェックポイントは「ログファイルが切り替わるとき」に必ず発生するため、20分ごとにチェックポイントが発生します。1時間(60分)に 20分ごとの発生が 3回あるので、選択肢の中では ウ(3回)が正しいです。
解法ステップ
- 単位とレートをそろえる
- 1トランザクションのログ長 = 10kB
- 発生頻度 = 20件/秒 → ログ書込み速度 =
- ログファイル切替間隔を求める(1ファイル当たり)
- 1ファイル = (問題の定義に従う)
- 時間 =
- データベースバッファが満杯になる時間を求める(念のため)
- バッファ容量 =
- 時間 =
- チェックポイント発生の優先関係を考慮する
- ログ切替(20分ごと)で必ずチェックポイントが発生し、その都度バッファは初期化される。したがってバッファが満杯になるまで到達する前に頻繁に初期化される。
- したがって 60分間に 20分間隔で起こるチェックポイントは 3回になる。
選択肢別の誤答解説
- ア: 1.5
- 誤りの典型:ログファイルを「2つ合わせた合計容量(480M)」で考えて切替までの時間を計算し、1時間に 回とする誤り。実際の切替は「一つのログファイルを使い切ったとき」に起こるため、単位は1ファイルごとに計算する必要があります。
- イ: 2
- 誤りの典型:ログ切替の20分とバッファ満杯の40分のどちらか一方だけを起点にして、60分に2回と誤認する場合。実際は20分ごとのログ切替で必ずチェックポイントが発生するため2回より多くなります。
- エ: 6
- 誤りの典型:ログ切替(20分)とバッファ満杯(40分)の両方を別々にカウントして重複して考え、例えば「20分ごとに2回分」といった二重計算を行う誤り。チェックポイントはイベント発生時にバッファを初期化するため、ログ切替が優先的にチェックポイントを発生させることで実際の発生数は20分間隔に統一されます。
よくある誤解
- 「ログファイル2つ分を合わせて切り替え間隔を計算する」こと
- 実際は「一つのログファイルを使い切ったとき」に切替が起こるため、1ファイルごとに計算する必要があります。
- 「バッファが一度でも満杯になれば必ずより頻繁にチェックポイントが起きる」と考えること
- 実際にはログ切替でチェックポイントが周期的に発生し、その際にバッファは初期化されるため、バッファ満杯イベントはその前に発生しないことがある(本問では発生しない)。
- 単位換算(1Mの定義)の混同
- 問題文の定義に従い として計算すること。
補足コラム
WAL(Write-Ahead Logging)では「データ本体をDBファイルに反映する前に、対応するログを永続化する」ことが原則です。本設問では「ログ書込みが先、チェックポイントでバッファをDBに反映して初期化」という挙動が想定されており、ログの書込み速度と1ファイルあたりの容量がチェックポイント頻度に直接影響します。実運用ではチェックポイントの発生が性能に与える影響(I/O負荷や応答性)を考慮し、ログファイルサイズやバッファ容量、チェックポイント方式を設計します。
FAQ
Q. ログ切替とチェックポイントが同時に起きた場合はどうなる?
A. 問題の仕様では「ログファイルが切り替わるとき」にチェックポイントが発生するとあるため、切替が起きる時点でチェックポイントが実行され、終了時にバッファは初期化されます。WALの順序は保たれますが、頻度計算には切替間隔が直接使えます。
A. 問題の仕様では「ログファイルが切り替わるとき」にチェックポイントが発生するとあるため、切替が起きる時点でチェックポイントが実行され、終了時にバッファは初期化されます。WALの順序は保たれますが、頻度計算には切替間隔が直接使えます。
Q. バッファ満杯(40分)がチェックポイントを起こす条件だが、なぜ今回は起きないのか?
A. ログ切替が20分ごとに発生し、その都度バッファが初期化されるため、バッファが満杯になるまで到達する前に毎回リセットされます。したがってバッファ満杯条件でのチェックポイントは発生しません。
A. ログ切替が20分ごとに発生し、その都度バッファが初期化されるため、バッファが満杯になるまで到達する前に毎回リセットされます。したがってバッファ満杯条件でのチェックポイントは発生しません。
関連キーワード: チェックポイント, WAL, ログファイル切替, データベースバッファ, 発生頻度

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

