こんばんは。今日は、SQL Serverの高速データベース復旧機能について少し勉強をしたので、分かったことなどを簡単にまとめておきたいと思います。
高速データベース復旧とは?
高速データベース復旧 – SQL Server | Microsoft Docs
高速データベース復旧を管理する – SQL Server | Microsoft Docs
上の公式Docやネットを調べてわかったポイントは以下。
- SQL Server / Azure SQLの可用性を高めるためのデータベース復旧オプションの1つ。
- SQL Server 2019で登場した機能。
- Azure SQL(Azure SQL Database / Azure SQL Managed Instance / Synapse SQL)では規定で有効。SQL Server 2019では規定で無効。
- 従来は、以下のようにPhase2とPhase3で、最後にコミットした時点から/まで、操作をやり直す必要があった(このPhase2, 3の動作は、SQL Server:バックアップとリストアの基本 – Qiitaの図をみると理解しやすいと思います)
- この場合、復旧時間は障害発生時にまだアクティブだったトランザクションの実行時間の長さに比例する(それだけ過去時点からのRedo/過去時点までのRollbackが必要)
- このPhase2とPhase3を”うまいことやることで”復旧時間を短縮できるようにしたのがADR。
- 具体的には、トランザクションログを個別に適用するREDO/UNDOをやめて、PVSと呼ばれる永続ストアを使った行のバージョン管理と、バージョン管理ができない操作(ロックの取得など)に対してsLOGというログストリームを使うようにした点がポイント。
- sLOGに記録する操作は従来の復旧と同じ区間のREDO/UNDOが必要だけど、トランザクションログ全体のREDO/UNDOと比較すると圧倒的に少ないボリュームなので高速。
- (これは言及された記事がなかったので下の図をみながらの推測です)バージョン管理された操作は、チェックポイントが走るとディスク(PVS)に書き込まれるため、REDOフェーズではチェックポイント以降のトランザクションログのREDOのみですむ。
- また、中断されたトランザクションはPVS上ステータスを中止に変更するだけでロールバックが完了するので、UNDOフェーズはsLOGのロールバックしか必要ない。
- ADRを使うことで実際にどのくらい復旧のパフォーマンスが向上するかは、Microsoft Researchの発表が参考になる。従来だと復旧に50分以上かかっていたような処理でも8秒以下で終わる、という驚異の性能。(Constant Time Recovery in Azure SQL Database – Microsoft Research)
- 高速データベース復旧は、実行時間の長いトランザクションがあるワークロードに対して特に効果が高い
- 一方で、更新操作の都度PVSの更新も併せて発生するため、大量の OLTP など、更新や削除の回数が多く、PVS クリーンアップ プロセスで領域を再利用するための保存/復旧期間がないデータベース環境の場合は推奨されない
というかここまで書いておいてあれですが、調べてる途中で以下の記事(1シリーズで3記事あります)をみつけました。こちら歴史ふくめてとても分かりやすくまとまっていましたので、これを読むと良いと思います笑
https://enterprisezine.jp/article/detail/12665?p=1
上の記事でも書かれていますが、PaaSのAzure SQL DatabaseやAzure SQL Managed Instanceなどは、メンテナンスなどでの再起動発生を前提としているので、日常的に復旧が行われる前提で、復旧が高速に行われる点が重視されて規定で有効となっている(かつ変更不可)、というのは納得いく気がします。
高速データベース復旧を有効化する方法
SQL Serverで高速データベース復旧を有効化する方法はこちらに説明があります。
高速データベース復旧を管理する – SQL Server | Microsoft Docs
ALTER DATABASE [DB] SET ACCELERATED_DATABASE_RECOVERY = {ON | OFF};
コメントを残す