SQL SERVER-Alwayson原理

傷城~ 2023-08-17 17:00 247阅读 0赞

流程

1609950-20190806164908198-17406086.png

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.如果辅助数据库处于该状态,说明该数据库与相应的主数据库保持同步

转载于:https://www.cnblogs.com/JinweiChang/p/11310117.html

发表评论

表情:
评论列表 (有 0 条评论,247人围观)

还没有评论,来说两句吧...

相关阅读

    相关 sql注入原理

    sql注入原理是什么: 1)SQL注入概念及产生原因: 当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击

    相关 【数据库】SQL执行原理

    一条SQL语句有几部分组成?执行一条SQL时各部分是按照什么顺序执行的?带着这些问题我们一起学习一下。首先看一下标准的SQL的组成,标准的SQL有下面10部分组成。知道SQL每

    相关 sql server 查询原理

    一.SQL SERVER是通过哪个组件以及如何来和客户端进行“接受要求”及“提供结果”的交互的。 二.关系引擎(查询处理器)处理SQL查询的详细步骤。   第一

    相关 Sql递归原理

    Sql递归原理 递归最少包括两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。  第二个查询被称为递归成员,使

    相关 SQL_exists 查询原理

    通过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle在执行IN子查询时,首先执行子查询,并将获得的结果列表存放