SQL Server Transactional Replication 中的 CommitBatchSize 和 CommitBatchThreshold 属性

最近遇到一个在SQL Server transactional replication 里关于CommitBatchSize 和CommitBatchThreshold设置的问题,BOL里面的解释很含糊:

  • CommitBatchSize “Is the number of transactions to be issued to the Subscriber before a COMMIT statement is issued. The default is 100.”
  • CommitBatchThreshold “Is the number of replication commands to be issued to the Subscriber before a COMMIT statement is issued. The default is 1000.”
有一个老外做了详细的测试结果总结了关于这两个属性的作用,详情见:
http://kendalvandyke.blogspot.com/2008/11/how-commitbatchsize-and.html


根据我自己的分析,这两个属性的作用如下:

  1. Distrabution Agent 将所有单条命令作为一个单位,CommitBatchThreshold和CommitBatchSize 是以单条命令数为标准
  2. 如果一个语句更新N条记录,这条语句视为在一个transaction中。但是命令数为N。
  3. 如果命令在一个transaction中,不考虑CommitBatchSize ,只考虑CommitBatchThreshold。
  4. 单个transaction不会被拆分成多个,就算单个transaction中的命令数超过CommitBatchThreshold。
  5. 如果提交多个transaction,第一个transaction 的命令数没有超出CommitBatchThreshold,则第二个transaction 会被合并如第一个。如果合并后的命令数超出CommitBatchThreshold,则不继续合并,但是前两个transactions照样提交。
  6. 如果命令不在一个transaction中,按照CommitBatchSize的设定将一定数量的命令合并成一个transaction。
  7. 如果CommitBatchSize的值大于CommitBatchThreshold,一个CommitBatchSize的transaction会被进一步拆分成两个,比如CommitBatchSize=5,CommitBatchThreshold=3,总命令数为10,会如下打包 4,1,4,1。为什么会出现4,请参见第5条,因为第一个包的命令数在向后合并中到第四个命令才超过CommitBatchThreshold。于是一个CommitBatchSize的transaction 被分成两个 4,1。

转载于:https://www.cnblogs.com/coldwine/archive/2009/08/11/1543635.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值