本文主要介绍SQL Server的恒定时间恢复算法(Constant TIme Recovery)以及传统的ARIES算法。
ARIES算法作为最传统,应用广泛的数据库恢复算法, 在MSSQL中也有应用。但随着数据库的发展,和云数据库的兴起,传统的ARIES算法逐渐没有办法满足云数据库高可用性的特点。面对云端用户,数据库的恢复慢慢呈现出一些弱点:
- 数据库的容量逐渐提高,导致更多长事务的出现
- 商用云服务器的数量增加,出现故障在所难免
- 云数据库的维护和升级由服务供应商提供,用户很难根据停机时间调整自己的业务
- 长事务在撤销时带来的不可用性(在撤销长事务时,长事务更改的表需要长时间持有写锁来撤销,导致该表不可用),部分长事务可能需要数十个小时才能撤销完成。
面对这些问题,微软在2019年的VLDB论文Constant Time Recovery in Azure SQL Database[1]提出了恒定时间恢复算法(Constant Time Recovery, 简称CTR)。在介绍这个算法之前,先简单介绍一下MSSQL应用的传统的ARIES算法。
ARIES
Algorithms for Recovery and Isolation Exploiting Semantics[2] (简称 ARIES)是经典的数据库恢复算法,采取no-force[3](在事务提交时,脏页可以不刷到磁盘)和steal(未完成提交的事务可以修改最近提交的值)的策略,以及Write Ahead Log(