高速データベース復旧の基本的な概念
高速データベース復旧の目標は、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操作完了が可能になります。