Shoeisha Technology Media

EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

高速データベース復旧(ADR:Accelerated Database Recovery)中編

edited by DB Online   2020/02/10 08:00

 前回の記事では、これまでSQL Serverが抱えてきたデータベース復旧処理に関する課題について紹介しました。今回は、その決定的な打開策として実装された高速データベース復旧の概念やコンポーネントについて詳しく確認していきます。

高速データベース復旧の基本的な概念

 高速データベース復旧の目標は、SQL Serverが停止された際に実行されていたワークロードやトランザクションのサイズに関わらず、データベースに対するREDO(ロールフォワード)とUNDO(ロールバック)を一定時間内に完了させることにあります。

 SQL Server 2019より前のバージョンでは単純に、従来の処理を高速化や並列化することにより時間短縮を模索しましたが、大きな効果を得ることはできませんでした。その経験をもとに、データベース復旧を一定時間内に完了させるという目標達成ためには、これまでとは大きく異なる動作原理の導入が必須であることは自明でした。そこで以下の2つの概念がデータベース復旧高速化のための新たな基軸として導入されました。

行バージョンの使用によるUNDO操作の最適化

 データベース復旧処理に長い時間がかかる大きな要因は、トランザクションログに記録された更新操作の順序に基づいて(基本的にはトランザクションログの逐次適用)データの変更を行うことにあります。

 SQL Serverの前回停止時に非常に負荷の高い処理が実行されていて、復旧対象となるトランザクションログが大量にある場合は、必然的にデータベース復旧に時間を要しユーザーが使用できるまでに長い時間がかかってしまうことになります。つまり一定時間内に復旧処理を完了させることは不可能です。

 この問題を解消するために、行バージョンを使用したUNDOを導入しました。行バージョンの考え方はスナップショット分離レベルで使用されるものと、基本的には同じですが一点決定的に異なる点があります。スナップショット分離レベルで使用する行バージョンはtempdbに格納されていて、SQL Serverが再起動されるとその内容が消失してしまいます。データベース復旧処理はSQL Serverの再起動後に行われるため、これでは役に立ちません。

 そのため、高速データベース復旧用の行バージョンは永続的バージョンストア(Persistent Version Store 以下、PVS)と呼ばれ、各ユーザデータベースに格納され、SQL Serverの再起動後も内容が保持されています。

 PVSを使用することによって、従来のARIES(Algorithm for Recovery and Isolation Exploiting Semantics)をもとにした構造から完全に脱却するのではなく、より短時間でのUNDO操作完了が可能になります。

※この続きは、会員の方のみお読みいただけます(登録無料)。


※この続きは、会員の方のみお読みいただけます(登録無料)。


著者プロフィール

  • 平山理(ヒラヤマオサム)

    日本マイクロソフト株式会社 プレミアフィールドエンジニアリング プレミアフィールドエンジニア 日本マイクロソフトの Premier Field Engineering 部で、お客様に SQL Server をスムーズにお使いいただくための様々なお手伝いをしています。Sybase (現 SAP) 勤務時代の 5 年間とマイクロソフトでの 12 年間、データベース道を極めるために精進する毎日です。 二人の娘の父親であり、ハードロックを好む「バッタもん」ギタリストであり、毎月 300 km くらい走る (わりと) シリアス ランナーでもあります。著書に「絵で見てわかる SQL Server の内部構造」(翔泳社)

バックナンバー

連載:現場からお届けするSQL Server 2019最新情報コラム
All contents copyright © 2007-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5