事务复制对SQLServer的影响

  1. 它使用SQL代理日志读取器作业来从发布数据库的事务日志中收集已提交的事务。这意味着在日志记录被读取之前不能清除日志。如果日志读取器代理出现问题,则日志可能意外增长。在大量的OLTP操作时,日志读取器代理的读和业务的写可能产生争用,这取决于你的IO的性能。

  2. 复制第一次初始化或者长时间停用后,再启用,会传输过多的事务日志,第一次生成快照时,会锁表。在此期间数据库会表现出响应延迟(其实还是日志瓶颈)。建议停用超过6小时,则使用最新备份还原到复制库后再进行同步。

  3. 连续运行代理的性能开销小于频繁调度

  4. 在分发服务器上 设置 –MaxCmdsInTran 能提高事务复制的性能,–SubscriptionStreams 能提高复制的吞吐量, -CommitBatchSize用于设置分发服务器上一次提交行数,网络越不靠谱,这个值就需要设置的越小,但越小则分发服务器上的开销越大。

  5. 发布服务器上的-ReadBatchSize参数用于指定一次读取的事务数量,默认是500个,如果复制的表较多,则这个值要设小一点,如果复制的表较少,则这个值要设大一点。(即,有效日志是不是稀疏的)

  6. 发布服务器上的 -PollingInterval 参数用于指定轮询周期,默认是5秒一次,设置的越频繁则时延越低,但对服务器的压力就越大。

  7. 查看复制延迟的存储过程:sp_replcounters

  8. SQL Server 的 Log reader 通过调用 sp_replcmds 去读取日志,通过调用sp_MSadd_replcmds 传到分发服务器