首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可用性组同步提交-写/读问题

可用性组同步提交-写/读问题
EN

Stack Overflow用户
提问于 2019-11-27 00:29:25
回答 1查看 49关注 0票数 1

我们为客户配置了一个具有同步提交模式的可用性组和两个群集。一个集群是主集群,并且是可写和可读的。另一个群集是辅助群集,并且是只读的。我们使用辅助集群进行只读操作。此外,我们在asp.net门户上使用此集群来读取数据库,并使用主群集来写入数据库。通过测试门户和AG的功能,我们发现了一个问题。通过更改门户中某些数据库表中的数据并单击“保存”,网站的刷新将显示旧数据,直到我们再次刷新网站。第一个问题是同步提交模式到底是什么意思?在主服务器上提交数据后,我是否可以从次服务器读取数据?

我在数据库上编写了一个表和脚本来测试读/写功能。

创建用于测试的表:

代码语言:javascript
复制
CREATE Table temp.tblAuthors
(
   Id int identity primary key,
   Author_name nvarchar(50),
   country nvarchar(50)
)

在主群集上插入30000个数据行的第一个脚本:

代码语言:javascript
复制
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
GO

BEGIN TRANSACTION A;

DECLARE @Id INT

SET @Id = 1

WHILE @Id <= 30000
BEGIN
    INSERT INTO TEMP.tblAuthors
    VALUES (
        'Author - ' + CAST(@Id AS NVARCHAR(10)),
        'Country - ' + CAST(@Id AS NVARCHAR(10)) + ' name'
        )

    SET @Id = @Id + 1
END

COMMIT TRANSACTION A;

PRINT CONVERT(VARCHAR, SYSDATETIME(), 121)

用于在循环中每隔2毫秒读取辅助群集的第二个脚本:

代码语言:javascript
复制
DECLARE @i INT = 1;
DECLARE @PrintVarchar NVARCHAR(max)

WHILE (@i <= 60000)
BEGIN
    WAITFOR DELAY '00:00:00.002'

    SELECT Count(*),
        CONVERT(VARCHAR, SYSDATETIME(), 121)
    FROM TEMP.tblAuthors

    PRINT @PrintVarchar

    SET @i = @i + 1;
END

在第一步中,我使用到辅助集群的connecton运行第二个脚本,以跟踪我可以在辅助集群上看到数据的时间点。在下一步中,我运行第一个脚本将数据插入到主群集上的表中。最后,当插入的数据在次要服务器上可读时,我检查主服务器上提交的日期时间和次要服务器上的日期时间。

结果是:

代码语言:javascript
复制
Commit on primary:     2019-11-26 06:55:58.9978911 
Readable on secondary: 2019-11-26 06:55:59.8104941

在主群集上提交后,辅助群集上的数据大约在一秒钟后即可读取。这就解释了门户上的保存-刷新问题。我们将数据保存在主服务器上,刷新速度比提交后的延迟更快。

有没有人能解释这种现象?对于asp.net门户,这种情况是正确的吗?或者我们是否应该仅对门户使用主群集?

对不起,我的英语不好。

诚挚的问候,

亚历克斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-27 00:53:45

您的门户应用程序没有只读工作负载。它应该使用主群集来访问所有数据库。

同步模式可确保事务日志在次节点上得到强化,并确认主节点,然后主节点提交事务。这并不意味着在提交事务时,更改的数据在辅助服务器上可用。辅助服务器有一个重做线程来在辅助服务器上应用事务,这就是延迟的来源。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59055410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档