SQL Server AlwaysON 同步模式的疑似陷阱
时间:2022-03-10 17:20
原文:SQL Server AlwaysON 同步模式的疑似陷阱
SQL Server 2012 推出的最重要的功能之一Alwayson,是一个集之前Cluster和Mirror于一体的新功能,即解决了Cluster依赖共享存储的问题,又解决了镜像不能实时读以及转移后连接串需要添加转移IP的问题,看起来的确很实用。
而且Alwayson多副本的功能为实现读写分离提供了可能,试想一下,当主副本压力比较大的时候,是否可以将读操作引向辅助副本呢?答案一般来讲是肯定的,请注意,是一般!
Alwayson有两个同步模式,同步和异步,即然是同步,理所当然的我认为他是实时的,所以我配置了只读路由,来使用这个功能。
遗憾的是,这个同步并不是数据的实时同步,当主副本数据发生变化时,同步模式下的辅助副本并不能立即取到变化的数据。
实验如下:
EXEC sp_addlinkedserver @server = N ‘Secondary‘ , @srvproduct = N ‘‘ ,
@provider = N ‘SQLNCLI‘ , @datasrc = N ‘192.168.200.201‘ ;
EXEC sp_addlinkedsrvlogin ‘Secondary ‘ , ‘false ‘ , NULL , ‘sa‘ , ‘sqlcn.com‘
USE DemoDB
go
CREATE TABLE tb_alwayson
(
id INT
IDENTITY
PRIMARY
KEY
,
name
VARCHAR (200)
)
INSERT
INTO tb_alwayson
( name
)
SELECT
NEWID()
SELECT
COUNT (*)
FROM
tb_alwayson
WAITFOR DELAY ‘00:00:00.900‘
SELECT
COUNT (*)
FROM
Secondary.DemoDB.dbo.tb_alwayson
|
使用连接服务器,这是一个非常好理解的测试办法,在我的环境里,你会发现,在辅助副本上要取到变化的数据,大概要900ms才能保证,900ms以下,都没法保证,甚至在300ms以下,没出现过一次能同步的情况。
这就是同步模式,让你没有一点点儿防备。
事实已经很清楚了,同步的原理决定了数据的延时,想用AlwaysON做读写分离的朋友们,考虑好你所能容忍的延时时间吧!
另外,微软你敢在官方联机文档与各种技术大会上把同步模式非数据实时同步提一下吗?
SQL Server AlwaysON 同步模式的疑似陷阱,布布扣,bubuko.com