高可用Windowsシステムの研究
SQL Server 2005の高可用テクノロジ編

第3回 可用性向上のための機能と各種ツール群

1.可用性向上のための機能

デジタルアドバンテージ
資料提供、技術協力:マイクロソフト
2007/05/30
Page1 Page2 Page3 Page4

 SQL Server 2005では、データベースの可用性を向上させるためにさまざまな機能が提供されている。代表的な機能を以下に示す。

高可用性実現のためにSQL Server 2005が提供する代表的な機能
エラー検出のしくみが強化され、サービス復旧までの時間短縮、パーティション・テーブルによる障害の局所化などの機能が追加されている。

 障害からの復旧時間の短縮、障害の局所化、エラー検出機能の強化などが行われている。以下、個々の機能について詳しく見ていこう。

復旧時のサービス提供開始までの時間を短縮する「高速復旧」

 データベースが何らかの理由で障害を起こして復旧が必要な場合、まずデータベース・サービスのインスタンスを起動し、ロールフォワード(ログに記録されているチェックポイント*1以降の処理を実行する)とロールバック(処理途中でエラーが発生し、コミットされていないトランザクションのデータベース処理を元に戻す)を順次実行する。この際、従来のSQL Server 2000では、最後のロールバック処理が完了するまで、データベースのサービスを開始できなかった(アプリケーションによるデータベースへのアクセスが行えなかった)。

*1 チェックポイント(checkpoint):データベース・エンジンがダーティ・バッファ・ページ(変更が加えられたが、まだディスクに書き込まれていないページ)をディスクに書き込むイベント。

 これに対しSQL Server 2005では、新しい「高速復旧」オプションが追加された(ただし利用できるのはEnterprise Editionのみ)。これによりアプリケーションは、トランザクション・ログのロールフォワードを完了した直後から、データベースにアクセスできるようになる。以前のSQL Server 2000では、ロールバック処理が終了するまでアクセスはできなかった。

 ただしロールバック対象のデータが含まれるデータ・ページへのアクセスは、ロールバック処理が完了するまでブロックされる。

SQL Server 2005で新規追加された高速復旧機能
従来はロールバックが完了するまで、データベースのサービスを開始できなかったが、高速復旧機能により、ロールフォワードが完了した時点で、データベースへのアクセスが可能になる。

 この高速復旧の機能は、フェイルオーバー・クラスタやシングル・サーバでのインスタンス再起動、バックアップからの復元時間短縮にも有効である。特に効果的なのは、バッチ処理で大量のデータを更新している場合など、ロングトランザクション実行時の復旧である。ロングトランザクションの処理中に障害が発生した場合、コミットされていないデータ量も必然的に増えるので、ロールバック処理に時間がかかる場合がある。この場合も高速復旧により、フェイルオーバー時間が大幅に短縮される。

ディスク障害の局所化を可能にするパーティション・テーブル

 SQL Server 2005では、1つのテーブルを論理的な複数のパーティション(partition=「仕切り」「区画」などの意味)に分割して管理する「データ・パーティショニング」機能が新たに追加された。分割した論理パーティションを、別々の物理ファイル・グループに割り当てることが可能である。

 パーティショニングには大きく2つのメリットがある。1つは、大量データの処理が高速かつ容易になることだ。特にバッチ処理における大量データの削除やローディングなどに有効である。RDBMSは大量データの削除に時間がかかる特性があるが、パーティショニングの場合は、パーティション単位でデータを一括で削除することができる。この機能を使用することにより、バッチ処理の際に行われる大量データの削除処理時間の大幅な短縮を見込める。また、大規模なテーブルではインデックスも巨大になるので、大量のデータを挿入したり、削除したりすると、インデックスの更新処理に時間がかかる。一度インデックスを削除して再作成した方がよい場合もあるが、この処理も巨大なテーブルであれば時間がかかる。パーティショニングの場合は、インデックスもパーティショニングできるので、新しいパーティションにデータを挿入したり、削除したりした場合は、そのパーティションに生成されたインデックスの更新だけで済み、インデックス更新を高速に実行できるようになる。またインデックスの再作成も、パーティション単位でできる。再作成が必要なパーティションも限定可能であり、インデックスのサイズも小さくなるので、インデックスの再作成時間の短縮も可能になる。うまくパーティションを設計することで、大量のデータを効率的に操作可能になる。

 そしてもう1つのメリットが、ファイル・グループを分割することによる障害の局所化だ。万一障害が発生した場合でも、障害の影響は、それが発生したファイル・グループ内部にしか及ばない。つまり障害が発生していない別のファイル・グループは影響を受けることなく、通常どおりにアクセスを続行できる。また、障害部分のリカバリも、オンラインのままで、ファイル・グループ単位で実行可能である(破損対象個所のみオフラインにして復元する)。ファイル・グループを正しく設計すれば、万一障害が発生した場合でも、その影響を最小化して、サービス継続の可能性を高めることができるのだ。

 例えば下図は、売上情報データベースにアクセスするアプリケーションの例である。このデータベースでは、「売上明細テーブル」を年ごとに別のパーティションにし、パーティションごとに別々のファイル・グループを割り当てている。そしていま、2002年分の「売上明細テーブル」のファイル・グループに何らかの障害が発生したとする。いうまでもなく、2002年の売上明細にはアクセスできなくなるが、図のようにパーティションを設計しておけば、2003〜2005年の売上明細には問題なくアクセスできるわけだ。

パーティショニングによるディスク障害の局所化
この例では、年ごとの売上げ明細を別パーティションにしている。こうすれば、仮に2002年のファイル・グループに何らかの障害が発生しても、別のパーテョション(2003〜2005年分)のデータには問題なくアクセスできる。

可用性向上のためのそのほかの機能

 上記2つ以外の可用性向上のための機能は次のとおり。

チェックサム
 ページをディスクに書き込む際に、ページ全体の内容のチェックサムを計算し、ページ・ヘッダにその値を格納しておく。そして後にこのページをディスクから読み取るときに、チェックサムを再計算し、ページ・ヘッダに格納されているチェックサム(書き込み時に算出したチェックサム)の値と比較する。これにより、エラー検出の精度が改善される。

ページ復元
 ページ復元は、チェックサムの評価や、破損した書き込みによって壊れていると検出されたページを修正するための機能である。ページ復元の機能により、指定したページ(エラーが検出されたページ)だけを復元することが可能になる。この復元処理では、復元しているデータだけがオフラインになり、残りのページはオンラインのまま、サービスを継続できる。このような復元処理は「オンライン復元」と呼ばれる。オンライン復元は、SQL Server 2005 Enterprise Editionでのみ実行できる。

バックアップの信頼性向上
 SQL Server 2005では、前述したページ単位の読み書きの際だけでなく、バックアップの作成時、復元時にもチェックサムによるエラー検出が行えるようになった。この機能は「バックアップ・チェックサム」と呼ばれる。バックアップ・チェックサムは、バックアップ作成時に生成し、復元時に検証する。操作中にエラーを検出するかどうか、エラー発生時に操作を停止するか続行するかを制御できる。バックアップにバックアップ・チェックサムが含まれている場合には、RESTOREステートメント、およびRESTORE VERIFYONLYステートメントでエラーを検査できる。

 またこれに加え、バックアップ・イメージの複製を最大4つまで作成しておき、復元時のメディア・エラーに対処できるようにする「ミラー化バックアップ」の機能も追加された。


 INDEX
  [高可用Windowsシステムの研究]
  第3回 可用性向上のための機能と各種ツール群
    1.可用性向上のための機能
      2.可用性向上を支援するツール群
      3.SQL Server/データベースの構成確認
 
 [高可用Windowsシステムの研究]


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間