わかればいいや、DBスペシャリスト過去問解説

厳密な解説よりも「わかればいいや」とか「わかりやすい」を基準に解説していきます。

1108 views

問2

答えはウの3回。
まずは、トランザクションとチェックポイントの整理します。

プログラムからDBに書き込む前に、排他制御を行うためにトランザクションを開始し、処理が完了すると、コミットを発行してトランザクションを終了します。

コミットを行うと、データベースに反映されることになります。
しかし、データベースにはログファイルとデータファイルがあります。

WAL方式は、Write Ahead Logの略で、まずログを最初に書け、という意味です。
WAL方式のの場合、コミットはログファイルに書き込んだだけの状態です。

一方、チェックポイントは、データファイルを更新した状態を指します。

単純に、コミットした時点でログもデータファイルも更新すればよいように思いますが、ログファイルに書き込む処理に比べて、データファイルの更新処理は時間がかかります
そのため、ログファイルにだけ先に書いておき、後でゆっくりデータファイルに反映を行うようになっています。

問題は、チェックポイントの発生頻度は1時間当たり何回か?という問題です。

チェックポイントが発生する条件は、問題に以下のように書かれています。

  1. データベースのバッファ領域に空きがなくなったとき
  2. ログファイルが切り替わるとき

1.のデータベースのバッファ領域に空きがなくなった場合ですが、コミットしない場合は、データはログファイルに書かれず、データベースのキャッシュにだけデータ残ります。キャッシュとはデータベースが占有しているメモリです。
SQLを実行すると、まずキャッシュにだけデータが入ります。


そしてトランザクションが終了する、つまり、コミットするとログファイルに書き込まれ、キャッシュは消えます。
問題では、キャッシュは480Mバイトあり、1トランザクションあたり、10Kバイトしか書き込まないため、キャッシュが満杯になってチェックポイントが発生する、ということはなさそうです。

となると、2.の発生条件だけが問題になり、ログファイルが1時間で何回満杯になるかだけを考えればよくなります。
1秒間に20回のトランザクションが発生し、1回のトランザクションで10Kバイト書き込むため、
1秒間に書き込むバイト数は
10,000(バイト)×20(回) = 200,000バイト
になります。
1秒間に200,000バイト書き込むので、1時間だと3600倍のログを書き込むことになります。
200,000(バイト)×3600(回) =720,000,000(バイト)
1時間に720,000,000バイト書き込みますが、ログは1面240Mバイトで2面書き込むため、240Mバイト書き込むたびにログが切り替わります。

720,000,000バイトログに書き込むと、何回ログが切り替わるかは、ログサイズで割ればわかります。


720,000,000(バイト)/240,000,000(バイト) = 3(回)
よって、答えは3回のウになります。

Page 2 of 13.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

マッスル

自己紹介

本サイトの作成者。
趣味:プログラム/水耕栽培/仮想通貨/激辛好き
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
仮想通貨はNEMが好き。
水耕栽培は激辛好きが高じて、キャロライナ・リーパーの栽培にチャレンジ中。

サイト/ブログ

https://www.osumoi-stdio.com/pyarticle/

ツイッター

@darkimpact0626