DBMSのチェックポイントとコミット・ロールバックの違い
ITパスポート試験 令和8年度 問56 / データベース › トランザクション処理
過去問にチャレンジ
DBMSにおけるチェックポイントの説明として,適切なものはどれか。
- ア
トランザクションが正常に処理されたときに,トランザクションの一連の処理を確定させること
- イ
トランザクションが何らかの理由で正常に処理されなかったときに,データベースをトランザクションの処理開始前の状態に戻すこと
- ウ
複数のトランザクションを並列に処理しているときに,ロックの影響によってトランザクション同士が互いに相手のロックの解放を待つ状態になること
- エ
複数のトランザクションによるメモリ上のデータ更新の結果を,一度にまとめてHDDなどの外部記憶装置に書き込む操作や,操作が行われた時点のこと
会話形式の解説
講師今回はDBMS、つまりデータベースを管理するソフトウェアの「チェックポイント」の意味を問う問題です。選択肢はどれもトランザクションに関する用語の説明なので、それぞれが何の用語を指しているかを見分けるのがポイントです。
受験者チェックポイントという言葉から、処理を確定させる区切りのことかと思いました。そうすると、正常に終わった処理を確定させるという説明が当てはまりそうに見えます。
講師そこが紛らわしいところです。正常に終わったトランザクションの処理を確定させる操作は「コミット」といいます。トランザクションとは、ひとまとまりで扱う一連の処理のことです。コミットは個々のトランザクションの結果を正式に有効にする操作で、チェックポイントとは目的が違います。
受験者確定させるのはコミットなのですね。では、正常に処理されなかったときに処理開始前の状態に戻すという説明はどうでしょうか。
講師それは「ロールバック」の説明です。異常終了したトランザクションが途中まで行った更新を取り消して、元の状態に戻します。こちらもチェックポイントではありません。
受験者互いに相手のロックの解放を待つ状態というのは、デッドロックのことだと思います。
講師デッドロックで合っています。ロックとは、ほかの処理が同じデータを同時に更新しないように押さえておく仕組みです。お互いに相手の解放を待ち続けると、どちらも先へ進めなくなります。これもデッドロックの説明なので、チェックポイントではありません。これで残るのは、メモリ上の更新結果をまとめて外部記憶装置に書き込むという説明です。
受験者更新のたびにすぐディスクへ書き込むわけではないのですか。
講師更新のたびにディスクへ書き込むと、アクセスの回数が増えて処理効率が下がります。そのため、DBMSは更新内容をいったんメモリ上のバッファに保持しておき、一定の間隔でまとめてHDDなどに書き出します。この書き出す操作や、操作が行われた時点がチェックポイントです。
受験者つまり、確定がコミット、元に戻すのがロールバック、待ち合って止まるのがデッドロック、メモリの内容をまとめて書き出すのがチェックポイント、という整理ですね。正解はエだと分かりました。
講師そのとおりです。補足すると、チェックポイントは障害が起きたときの回復処理の基準点になります。ログを使って復旧する範囲を狭められるので、復旧時間が短くなります。チェックポイントは個々のトランザクションを確定させる操作ではないので、コミットと混同しないよう注意してください。
まとめ
DBMSのチェックポイントとは、複数のトランザクションによるメモリ上の更新結果を、まとめてHDDなどの外部記憶装置に書き込む操作、またはその時点のことです。更新のたびにディスクへ書き込むと効率が下がるため、DBMSはメモリ上のバッファにためてから一定の間隔で書き出します。チェックポイントは障害回復の基準点になり、ログで復旧する範囲を狭めて復旧時間を短くします。処理を確定させるのはコミット、処理開始前に戻すのはロールバック、互いのロック解放を待って止まるのはデッドロックなので、区別して覚えておきましょう。
解答・解説
正解はエです
この問題のテーマ
DBMSの障害回復で使う「チェックポイント」の意味を問う問題です。あわせて、コミット、ロールバック、デッドロックといったトランザクション管理の用語と区別できるかも確かめています。
解き方の考え方
四つの選択肢は、どれもトランザクションに関する用語の説明になっています。まず、それぞれの説明が何という用語を指すのかを考えます。ア、イ、ウはそれぞれコミット、ロールバック、デッドロックの説明だとわかれば、残るエの「メモリ上の更新をまとめて外部記憶装置に書き込む」がチェックポイントだと判断できます。
選択肢ごとの解説
- ×ア トランザクションが正常に処理されたときに,トランザクションの一連の処理を確定させること正常に終わったトランザクションの処理を確定させるという説明は、コミットのことです。コミットは個々のトランザクションの結果を正式に有効にする操作です。チェックポイントとは目的が違います。
- ×イ トランザクションが何らかの理由で正常に処理されなかったときに,データベースをトランザクションの処理開始前の状態に戻すこと正常に処理されなかったときにデータベースを処理開始前の状態に戻すという説明は、ロールバックのことです。ロールバックでは、異常終了したトランザクションが途中まで行った更新を取り消します。
- ×ウ 複数のトランザクションを並列に処理しているときに,ロックの影響によってトランザクション同士が互いに相手のロックの解放を待つ状態になることトランザクション同士が互いに相手のロック解放を待ち続けるという説明は、デッドロックのことです。デッドロックが起きると、複数の処理が待ち合ったまま先へ進めなくなります。
- ○エ 複数のトランザクションによるメモリ上のデータ更新の結果を,一度にまとめてHDDなどの外部記憶装置に書き込む操作や,操作が行われた時点のこと複数のトランザクションによるメモリ上の更新結果を、一度にまとめてHDDなどの外部記憶装置に書き込む操作やその時点という説明は、チェックポイントの定義そのものです。DBMSは更新内容をいったんメモリ上のバッファに保持しておき、一定の間隔でまとめてディスクに書き出します。この時点が障害回復の基準点になります。
補足
更新のたびにディスクへ書き込むとアクセス回数が増え、処理効率が下がります。そのため、DBMSはメモリ上でまとめて扱ってから書き出します。チェックポイントは個々のトランザクションを確定させる操作ではないので、コミットと混同しないように注意してください。
POINT
- チェックポイントは、メモリ上の更新結果をまとめて外部記憶装置に書き出す操作、またはその時点のことです。
- チェックポイントは障害が起きたときの回復処理の基準点になり、ログを使って復旧する範囲を狭めることで復旧時間を短くします。
- トランザクションを確定させる操作はコミット、処理開始前の状態に戻す操作はロールバックです。
- 互いに相手のロック解放を待って処理が進まなくなる状態はデッドロックです。
