流程

1.异步提交模式

主副本无须确认该副本已经完成日志固化,就可提交事务。

主副本不受辅助副本的影响

辅助副本上的DB处于SYNCHRONIZING

2.同步提交模式

主副本要确认副本已经完成日志固化,才可提交事务。

步骤 行为
1.提交事务 在主副本上运行COMMIT TRAN命令来提交事务
2.写入到本地日志记录

在主副本上,COMMIT TRAN 命令会被写成一条日志记录(此时记录还在主数据库的日志缓存中)。

然后主副本上的log writer工作线程会把直到COMMIT 命令为止的所有日志记录组成一个日志块从缓存写入到磁盘上的LDF文件中。

当日志被写入到磁盘之后,主数据库就开始等待来自辅助副本的消息来确认日志在辅助副本上被成功写入磁盘。在这之前,该事务提交操作会保持等待。

3.扫描日志

当日志开始被从缓存写入到磁盘上时,他也会发信号给Log Scanner工作线程,告诉Log Scanner"日志已经准备好了,可以被发送到辅助副本"。

Log Scanner从缓存中取出日志块,把它发送给alwayson的日志块解码器,一旦日志块被解码完毕,整个日志块也会被作为消息发送给辅助副本。

4.处理日志块消息 日志块消息在辅助副本上得到处理。固化线程负责将日志固化到磁盘上。然后日志被保存到辅助数据库的日志缓存中,重做线程从缓存中获得日志块并开始执行重做操作。
5.反馈进度

每当辅助副本收到3条来自主副本的消息时,就把固化和重做的进度作为一个消息返回给主副本。

如果超过1秒还没有收到3条消息,进度消息也会被返回。进度信息中包含了当前那些LSN被固化,哪些LSN被重做了。

由于重做线程晚于固化,所以被固化的LSN会多于被重做的LSN。

6.完成提交 主数据库收到了辅助副本发来的消息,完成事务提交并向客户端发送一条确认的消息。

名词解释

连接状态

DISCONNECTED

主副本与辅助副本之间 ping 消息如超时则连接进入DISCONNECTED,

1.如果主副本发现辅助副本断开了和它的连接,在主副本上会将那些辅助副本上的辅助数据库标记为未同步,主副本等待辅助副本重新连接。

2.当辅助副本检测到它和主副本的连接断开后,辅助副本会尝试重新连接主副本。

CONNECTION

辅助副本和主副本间连接正常

可用性副本状态

可用性副本角色:primary ,secondary,resolving

resolving:既不是主副本也不是辅助副本。

NOT SYNCHRONIZING

副本中有一个或多个数据库未同步或未连接到AG

Synchronizing

正在同步副本中的一个或多个数据库

Synchronized

辅助副本中的所有数据库都与主副本的数据库同步

可用性数据库状态

NOT SYNCHRONIZING

无论什么模式如果一个事务在辅助数据库上重做失败,就会导致辅助数据库进入SYNCHRONIZING状态,此时主副本事务直接提交,无须等待。

1.如果主数据库处于该状态,说明该数据库未做好准备将其事务日志与相应的辅助数据库进行同步。

2.如果是辅助数据库处于该状态,原因如下:

                    1.由于连接问题或者重做失败,不在进行日志同步。

                    2.和主数据库的日志同步被挂起

                    3.由于角色切换,正处于装换的中间状态

Synchronizing

1.如果主数据库处于该状态,说明该数据库已做好接受来自辅助数据库的同步请求的准备

2.如果是辅助数据库处于该状态,说明该辅助数据库和主数据之间有正在进行同步的数据

Synchronized

1.如果主数据处于该状态,说明他至少同步了一个辅助数据库

2.如果辅助数据库处于该状态,说明该数据库与相应的主数据库保持同步

SQL SERVER-Alwayson原理的更多相关文章

  1. SQL Server AlwaysOn原理简介

    SQL Server2012所支持的AlwaysOn技术集中了故障转移群集.数据库镜像和日志传送三者的优点,但又不相同.故障转移群集的单位是SQL实例,数据库镜像和日志传送的单位是单个用户数据库,而A ...

  2. SQL Server AlwaysOn架构及原理

    SQL Server AlwaysOn架构及原理 SQL Server2012所支持的AlwaysOn技术集中了故障转移群集.数据库镜像和日志传送三者的优点,但又不相同.故障转移群集的单位是SQL实例 ...

  3. 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目

    最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...

  4. SQL Server AlwaysON 同步模式的疑似陷阱

    原文:SQL Server AlwaysON 同步模式的疑似陷阱 SQL Server 2012 推出的最重要的功能之一Alwayson,是一个集之前Cluster和Mirror于一体的新功能,即解决 ...

  5. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

  6. 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  7. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...

  8. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  9. (转) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    原文地址: http://www.cnblogs.com/lyhabc/p/4682986.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第三篇,这一篇才真正开始搭建Alwa ...

  10. (转)从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    原文地址:  http://www.cnblogs.com/lyhabc/p/4682028.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集 ...

随机推荐

  1. [转]Maven 国内源配置(2019/2/14)

    原文地址:https://segmentfault.com/a/1190000018147680 新年开工后要开始新的项目,但是发现一些项目的依赖没有在阿里仓库Central或Public源之中,项目 ...

  2. JVM常用命令和性能调优建议

      一.查看jvm常用命令jinfo:可以输出并修改运行时的java 进程的opts. jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程 ...

  3. EasyNVS摄像机公网全终端无插件网页摄像机直播管理服务运行出现“请求服务不存在或已停止”

    背景分析 了解我们产品线的小伙伴都知道,EasyNVR产品主要用于互联网安防直播,通过EasyNVR拉取摄像机的RTSP视频流,客户端通过访问EasyNVR服务端就可以实现音视频流分发.在此情况下会出 ...

  4. redis连接时报错:Could not connect to Redis at 127.0.0.1:6379: Connection refused

    在/etc目录下找到redis.conf 将daemonize no 修改为 daemonize yes 再输入 redis-server /usr/local/etc/redis.conf redi ...

  5. 使用adb命令控制anroid手机

     adb工具即Android Debug Bridge(安卓调试桥) tools.它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互.在某些特殊的情况下进入不了系统或者需要自动化测试的时候, ...

  6. [LeetCode] 254. Factor Combinations 因子组合

    Numbers can be regarded as product of its factors. For example, 8 = 2 x 2 x 2; = 2 x 4. Write a func ...

  7. Spring Boot拦截器实现并和swagger集成后使用拦截器的配置问题

    1. 定义拦截器 LoginInterceptor LoginInterceptor.java是整个登录认证模块中的核心类之一,它实现了HandlerInterceptor类,由它来拦截并过滤到来的每 ...

  8. 在ensp上的进行的浮动路由

    原理 实验模拟内容 搭建实验拓扑 相关参数 其他设置端口ip都一样,serial也一样(三个路由器都要设置的) 简单测试一下连通性 下面我们分别在路由器上配置所在网段的静态路由 配置完之后我们来查看一 ...

  9. QT 5.x 网络资源集锦

    github上的好书:太好了: http://qmlbook.github.io/en/ch01/index.html 论坛: 基于QT的音乐创作软件:(是不是可以跟谷歌的深度学习艺术项目结合) ht ...

  10. MyBatis框架的详解

    一.MyBatis的介绍 在使用的时候,需要配置文件的方式告知框架需要的信息,多数会使用XML文件作为框架的配置文件. 框架都是由第三方提供的,提供的都是jar包.因此,使用框架前,必须将框架涉及的j ...