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