コミットの解説(基本情報技術者シラバス用語)

目次

コミットとは

コミットとは、データベースのトランザクション処理において、行ってきた一連のデータ操作(追加や更新など)がすべて正常に完了したため、その変更をデータベースに「最終確定」させ、永続的に保存する命令です。コミットが実行されると、他のユーザーからもその変更内容が見えるようになります。反対に、処理中にエラーが発生して実行前の状態に戻す操作は「ロールバック」と呼ばれ、コミットとペアでデータの正確性を支えています。

具体例

ショッピングサイトで商品を購入する流れを例にします。買い物カートから「購入確定ボタン」を押すと、クレジットカード決済の成功と在庫の減少処理が裏側で実行されます。すべてのステップが問題なく終わると、システムがデータベースに「コミット(確定)」命令を送り、正式に注文が登録されます。もし決済手続き中に通信エラーで失敗した場合は、「ロールバック」が実行されて在庫数なども購入前の状態へ自動で巻き戻されます。

もう少し詳しく

コミット(COMMIT)は、データベースにおけるトランザクション制御言語(TCL)の代表的なコマンドであり、データの「不揮発的確定」を担います。コミットが実行されるまで、トランザクション内の更新データは「仮保存(一時的な状態)」であり、他の接続ユーザーからは通常見えません。これにより、未確定の不安定なデータを他人が読み込んでしまう不整合(ダーティリード)を防ぐことができます。コミット命令を受信した段階で、DBMSはすべての更新情報を確定させ、初めて他のユーザーにもその変更が公開されます。

コミット時の安全性を担保するために、多くのRDBでは以下の技術が用いられています。

・WAL(Write-Ahead Logging / ログ先行書き込み):実際のデータファイルをディスクに更新する前に、変更履歴である「トランザクションログ」をまずディスクに書き込みます。コミットコマンドが成功したとみなされるのは、このログ書き込みが完了した時点です。これにより、データ本体の書き込み途中でクラッシュしても、再起動時にログをたどって安全に復旧(ロールフォワード)できます。

また、複数の異なるサーバーやデータベースにまたがって1つのトランザクションを実行する「分散データベース」においては、「二相コミットプロトコル(2-Phase Commit Protocol)」と呼ばれる高度な仕組みが用いられます。これは、全体の指揮役(コーディネーター)がすべての参加データベース(参加者)に対して「コミット可能か?」と問い合わせる『第1相(準備フェーズ)』と、全員から合意(Yes)を得られた場合に一斉に「コミットせよ」と命令を下す『第2相(コミットフェーズ)』の二段階を踏むことで、ネットワーク分散環境下でもすべてのシステムが一貫して同時コミットできるように合意形成する技術です。

試験でのポイント

IT試験においては、コミットとロールバックの挙動や目的、およびそれらがACID特性のどの性質を維持するために使われるかがよく問われます。

試験対策としての重要ポイントは以下の通りです。
・コミットの定義:「トランザクションの一連の処理が正常終了し、データの更新結果をデータベースに恒久的に反映(確定)させる操作」であることを覚えましょう。
・ロールバック(対比)との識別:何らかのエラーが発生した場合は、コミットではなく「ロールバック(実行前の状態に復帰)」を選択します。この使い分けのシナリオが問題になります。
・ACID特性との関係:コミットによって処理の確定と障害からの保護を保証することは、ACID特性の「原子性(Atomicity)」や「耐久性(Durability)」を維持するための主要な技術です。
・二相コミットプロトコル:応用情報や基本情報技術者の午前・午後試験において、「分散データベースシステムにおいてデータの整合性を保ちながら一斉にコミットを完了させるためのプロトコルはどれか」という問題で「二相コミット」を選ばせる問題が出題されるため、これもあわせて頭に入れておきましょう。

関連する用語

コミットと対になる、処理を取り消すための命令である「ロールバック」や、コミットを行う最小の実行単位である「トランザクション」が関連します。また、トランザクションの信頼性を担保するルール「ACID特性」や、コミット時のデータ回復に欠かせない「ジャーナル(ログ)ファイル」、さらに複数のデータベースで同期してコミットを行うための「二相コミットプロトコル」も重要な関連ワードです。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ