Replication 第一篇:Log Reader 参数调整
在事务复制中,发布服务会把日志记录到事务日志文件中,Replication Log Reader Agent是一个可执行的进程,用于监控发布数据库中的事务日志,把标记为复制的事务从日志文件读取到分发数据库distribution中。
调整Log Reader Profile 参数
在数据仓库中,通常情况下,Transaction的数量极少,但是每个Transaction包含的Comman数量极大,这种事务对于复制的延迟影响极大。降低事务复制的时延,就是要控制每个事务包含的command数量,使其包含的command数量和分发command的速度相匹配。
1,调整 -ReadBatchSize 参数
在每个处理循环中,只处理少量的Transaction,默认值是500;查看 MSrepl_transactions,每日的Transaction数量在300左右,将 -ReadBatchSize =10。
2,调整-MaxCmdsInTran 参数
调整-MaxCmdsInTran 参数,使每个Transaction包含的Command不能超过一定的数量,对于过大的Command,将其拆分成多个Transaction,默认值是0,表示不限制Transaction中Command的数量,保留Transaction的原始边界。查看 MSrepl_commands,每日的每日的Command数量在2千万左右,将 -MaxCmdsInTran=10万,能满足大多少Transaction的需求。
select top 11 t.xact_seqno as trans, count(0) as cmds from dbo.MSrepl_transactions t with(nolock) inner join dbo.MSrepl_commands c with(nolock) on t.xact_seqno=c.xact_seqno where entry_time between '20160806' and '20160807' group by t.xact_seqno order by cmds desc
-MaxCmdsInTran 参数必须通过Agent - > Job Step的属性来修改。
-MaxCmdsInTran number_of_commands
指定Log Reader把命令写入到分布数据库时,分组到每个事务的最大commands数量。使用此参数可以使Log Reader Agent和Distribution Agent 把发布服务器上的大型事务(由大量commands组成)划分为几个较小的子事务。指定此参数可以减少分发服务器上的争用并减少发布者和订阅者之间的延迟。 因为子事务是以较小的单位应用的,所以订阅者可以在子事务结束之后访问原始事务的数据行,从而打破了严格的事务原子性。 该参数的默认值为0,它将保留发布者的事务边界。
注意:在事务复制中,事务在订阅者和发布者中的执行顺序是相同的,换句话说,订阅者接收事务的顺序和发布者执行事务的顺序是一致的。
参考文档: