

可以看到,这1个事务的命令都得一次传递完才能分发,而分发又消耗时间,这里等待太久影响事务的实时性。如果还有其他事务,默认500(参考参数:-ReadBatchSize),也将一起传递,不过耗时较长。
现在更改参数,扫描到 1000 左右的命令就即时分发,需要设置如下参数:
-MaxCmdsInTran number_of_commands

注:该参数只能添加到日志读取器代理中,在代理配置文件没有此参数的设置。
添加后重启日志读取器代理。再次插入 30 万的数据,到监视器查看。

可以看到,命令达到 1000 左右就进行分发了,此时查看订阅数据库,数据也同步过来了,这样就省去了较多扫描命令的时间。
更详细查看每个事务的命令数,如下:
SELECT top 10 A.xact_seqno,A.entry_time,COUNT(*) AS cmdsFROM distribution.dbo.MSrepl_transactions A(NOLOCK)INNER JOIN distribution.dbo.MSrepl_commands B(NOLOCK)ON A.xact_seqno=B.xact_seqnoGROUP BY A.xact_seqno,A.entry_timeORDER BY cmds DESC

这个参数虽好,但是也可能引起数据的一致性。如:在发布更新了一批数据,但是订阅查询时却有不同。分发事务遇到冲突或者死锁,也导致这部分的数据不一致。
文章转载自SQLServer,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




