SQL Server Always On 是一种数据库可用性解决方案,它提供跨独立服务器和 SQL Server 实例的自动化数据库复制和故障转移。它允许数据库管理员和开发人员构建保证数据库正常运行时间并消除计划停机时间的解决方案。
同步复制技术可以将事务写入多个同步的辅助副本。它提供了在被认为已提交之前等待所有二级副本接收和记录事务的能力。它还确保在向用户返回成功(提交)之前,所有事务都是持久的并在所有副本上提交。事务日志被传送到每个二级副本,二级副本可以服务读取请求。
本文将探讨 MS SQL Server Always On 的同步提交模式。
同步提交模式副本
SQL Server Always On 同步提交模式侧重于高可用性而不是性能。性能权衡可能是由于事务延迟增加所致。它保证在主副本和二级副本上都提交 SQL Server 事务。一旦用户在主副本上启动事务,SQL Server 就会将该事务发送到同步的二级副本。次要副本将日志硬化到磁盘后,它会向主要副本发送确认。主副本收到二级副本的确认后,会加固日志并向用户发送事务确认。
下图描述了具有单个主副本和二级副本的同步 Always On。

一旦发生初始数据同步,二级数据库状态将更改为 SYNCHRONIZED。SQL Server 确保当数据库处于 SYNCHRONIZED 状态时,它会同时写入主副本和二级副本。
同步数据提交中的故障转移模式始终开启
Always On 中的同步提交模式支持自动和手动故障转移
自动故障转移
自动故障转移需要当前主副本和至少一个处于同步提交模式的辅助副本,并具有自动故障转移模式配置。它确保数据库快速可用,而不会在主副本出现问题时丢失任何数据。
注意:在 SQL Server Enterprise 版的自动故障转移配置中,您最多可以拥有三个二级副本。
在以下情况下可以进行自动故障转移:
- 二级副本必须与主副本同步,即所有辅助数据库都同步。
- 故障转移群集 (WSFC) 群集必须具有仲裁。
二级副本在自动故障转移期间接管主要角色并恢复所有数据库以服务客户端请求。如果旧的主副本上线,它将接管二级副本的角色并开始从新的主副本接收日志块。
注意:如果您已将主副本的故障转移模式设置为 MANUAL,则即使辅助副本处于自动故障转移模式,SQL Server 也无法执行自动故障转移。
手动故障转移
您可以从主副本手动故障转移到二级副本。如果主副本和二级副本都处于 Synchronized 状态,您可以启动故障转移以将辅助副本提升为主副本。这种类型的手动故障转移不会导致任何数据丢失。
同步数据提交中数据延迟的原因
如果您在主副本和二级副本之间遇到数据延迟问题,可能是由于以下原因:
- 网络延迟或故障会导致二级副本和主副本之间出现超时问题。
- 假设您在二级副本上手动挂起可用性组同步。在这种情况下,辅助数据库的运行状况不是 HEALTHY,并且它无法同步日志记录,直到辅助数据库恢复并重新同步。
- 将主副本状态更改为异步提交模式会将可用性组更改为异步模式,而与二级数据库配置无关。
何时使用同步数据提交始终开启
对于强调高可用性而不是性能的关键、高可用性数据库,您应该使用 Always On 的同步数据提交,并在主数据中心准备数据库的完全同步副本。
您应该为 Always On 使用同步数据提交:
- 强调高可用性而不是性能的关键、高可用性数据库。
- 在主数据中心准备数据库的完全同步副本。
包起来
根据您的特定用例,您可以为 SQL Server Always On 可用性组实现同步或异步数据提交。如果您想更清楚地了解哪种数据提交模式最适合您的需求,请首先查看这篇文章,了解何时以及如何对 Always On 使用异步提交模式。
目前,ClusterControl 支持异步可用性组并提供 30 天免费试用 - 无需 CC。要熟悉 SQL Server Always On 的 ClusterControl,您可以参考这篇关于使用 ClusterControl 设置 SQL Server Always On的帖子和本部署指南。
原文标题:Exploring Synchronous Commit Mode for SQL Server Always On
原文作者:Rajendra Gupta
原文地址:https://severalnines.com/blog/exploring-synchronous-commit-mode-for-sql-server-always-on/




