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

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

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

我在db上写了一个表和脚本来测试读/写功能

创建用于测试的表:

CREATE Table temp.tblAuthors
(
   Id int identity primary key,
   Author_name nvarchar(50),
   country nvarchar(50)
)
用于在主群集上插入30000个数据行的第一个脚本:

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)
次要群集上的数据在主群集上提交后大约一秒钟后可读。这就解释了门户上的保存刷新问题。我们将数据保存在主服务器上,刷新速度与提交后的延迟一样快

有谁能解释这种现象?对于asp.net门户来说,这种情况是正确的,还是我们应该将门户仅用作主集群

对不起,我的英语不好

致以最良好的祝愿


Alex

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


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

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

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

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
Commit on primary:     2019-11-26 06:55:58.9978911 
Readable on secondary: 2019-11-26 06:55:59.8104941