ここから本文です

RDBMSが行っている「復旧処理」とは

@IT 7月25日(月)6時10分配信

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。今回は、「起動後に行っている、データベースの復旧処理の裏側」を解説します。

●SQL Serverが起動後に行っている重要な処理、「復旧処理」を理解する

 SQL Serverの起動後、システムとユーザデータベースはデータの整合性を保つために「復旧処理」と呼ばれる重要な処理を行っています。

 SQL Serverに限らず、RDBMSでは「WAL(Write Ahead Logging:ログ先行書き込み)」と呼ばれる動作で、障害時にデータの損失を防ぐリスクヘッジを行っています。

 つまり、「変更データをデータファイルに書き込む処理」は即時に行われるのではありません。障害が発生し、万が一稼働中のインスタンスが強制終了してしまった場合には、次回起動時にWALで記録したログレコードを基にして、COMMIT済みのデータをデータファイルに書き出す処理を行います。これが「復旧処理」です。この復旧処理によって、データの整合性を保つようにしています。

 SQL Serverがデータを保存する領域を「データファイル」、変更を記録する領域を「トランザクションログファイル」と呼びます。

 例えば、UPDATEステートメントでデータを変更したとします。変更処理そのものは、まずメモリ内で実行されます。その変更が確定(=COMMIT)されると、変更履歴をトランザクションログファイルに記録します。この段階では、まだデータファイルには反映しません。ユーザーによる変更処理はしたが、データファイルにはまだ反映されていないデータを「ダーティページ」と呼びます。データファイルには、SQL Serverが定期的に実行している「CHECKPOINT」と呼ばれる“ダーティページを一括して書き込む処理”が動いたときにようやく反映されます(図1)。

 なぜ、このような回りくどい処理をするのでしょう。1つはパフォーマンス向上のため。もう1つは、RDBMSが持つACID特性(*1)の「Durability(耐久性)」を確保するためです。

*1:ACID特性:「Atomicity(原子性)、Consistency(一貫性)、Isolation(独立性)、Durability(耐久性)」の頭文字。リレーショナルデータベースに求められる4つの耐性を示す専門用語。

 一方で、Durabilityを確保するためには、バックアップ処理を運用に組み込むことが肝心です。SQL Serverでは、大きく分けると「データのバックアップ」と「トランザクションログのバックアップ」の2種類があります。

●データベースの「復旧モデル」を理解する

 データベースには「復旧モデル」と呼ばれる、3段階の設定があります。この設定ごとに、採取すべきバックアップの種類が変わります。

 ちなみに、復旧モデルはデータベースごとに設定できます。このため、データベースごとに復旧できるレベルも変わることに少し注意が必要です。ディスク障害などのトラブル時には、採取したバックアップを基に復旧作業を行うことになります。


●筆者紹介
内ヶ島 暢之(うちがしま のぶゆき):ユニアデックス株式会社所属。Microsoft MVP Data Platform(2011~ )。OracleやSQL Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を行っていた。2016年4月よりIoTビジネス開発の担当となり、新しい仕事に奮闘中。ストレッチをして柔らかい身体を手に入れるのが当面の目標。
椎名 武史(しいな たけし):ユニアデックス株式会社所属。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。

最終更新:7月25日(月)6時10分

@IT

TEDカンファレンスのプレゼンテーション動画

暗闇で光るサメと驚くほど美しい海洋生物たち
波のほんの数メートル下で、海洋生物学者であり、ナショナルジオグラフィックのエクスプローラーかつ写真家のデビッド・グルーバーは、素晴らしいものを発見しました。海の薄暗い青い光の中で様々な色の蛍光を発する驚くべき新しい海洋生物たちです。彼と一緒に生体蛍光のサメ、タツノオトシゴ、ウミガメ、その他の海洋生物を探し求める旅に出て、この光る生物たちがどのように私たちの脳への新たな理解を明らかにしたのかを探りましょう。[new]