1.2 同步提交与异步提交
2016-6-1 高可用性

1.2.1 日志传输
AlwaysOn 可用性组、数据库镜像等解决方案需要为主数据库建立一个或多个“热备用”或“温备用”的辅助副本,因此需要在主数据库和辅助副本之间传送数据。

SQL Server 2005 SP1 引入了数据库镜像技术通过 TCP 5022 端口在各个节点计算机之间进行日志传输。辅助副本收到了“新的”事务日志后,先进行harden(固化),再执行 redo,从而保证各节点之间的数据一致。

在这种日志传输的工作模式中,主节点将有2个进程:一个进程收集事务日志;另一个进程监视日志传输。辅助节点也有2个进程:一个进程接收日志;另一个进程监视 redo。

根据主数据库是否等待辅助副本 harden 反馈信息,同步模式分为同步提交和异步提交。

1.2.2 同步提交模式
同步提交时,需要经过一系列的过程。

(1)主数据库在将事务日志写入文件的同时就传送给辅助数据库。然后主数据库等待辅助数据库的回应。

(2)辅助数据库收到了来自主数据库的事务,写入本地事务日志文件(固化),然后发送确认信息给主数据库。

(3)主数据库收到辅助数据库发来的确认信息,结束等待状态,继续运行。

(4)主数据库在遇到检查点时才将缓存中的“脏页”回写到数据文件;辅助数据库根据收到的事务在本地进行重做(Re-do)。

同步提交模式可以保证时刻拥有着一模一样的副本,因此具有极高的安全性。但是辅助服务器接收事务日志、写入事务日志文件和发送确认信息这一系列过程也会带来一定程度的延迟,从而影响到主数据库的性能。

由于同步提交对性能影响较大,因此 SQL Server 仅允许单向的同步提交(从一个主副本单向同步到多个辅助副本)。而且,SQL Server 严格限制了同步提交的副本数量,AlwaysOn 可用性组的一个主副本最多可以同时向 2 个辅助副本实现同步提交,其他副本则使用异步提交模式。。

1.2.3 异步提交模式
异步提交时,主数据库将事务发送给辅助数据库后,无需等待而直接继续运行。

异步提交模式消除了主数据库的等待状态,因此这种提交模式对性能几乎没有影响。但是辅助数据库可能遇到更新数据失败的情况(例如,因网络故障导致未接受主数据库的事务,或写入本地事务日志日志文件时遇到错误),而此时主数据库如果发生故障则可能造成数据丢失。