SQL Server 事务复制调优(1)
在如今有规模的OLTP系统中,为了缓解数据库单点读写压力,特别是读的压力,采用复制多个副本,是解决问题的一个不错的方法。
而SQL Server的事务复制 Transactional Replication 是我们所采用的最多的复制形式。以往的一些文章总是介绍一些基本的搭建,
缺少一些优化方面的介绍,今天我就简单介绍其中一些可以调整优化的地方,(其实微软这方面已经做的很出色,默认的情况下就以能
满足我们大部分的情形,希望通过这篇文章的介绍,大家结合自己系统的实际情况,做些调整可能会有一些意想不到的收获,注意在生产
环境中请谨慎操作)
在这之前,我们先回顾一下 事物复制 的流程
我们可以看到 从Publication 到 Subscriber 这这期间经历了LogReader Agent , Distribution Agent 这两个代理
用来传输生产库中,产生的数据变化,并最终体现到订阅库中。而对于这两个代理是否有可以优化的内容呢,在这篇文章中
我们先关重点注下 LogReader Agent。在之后的文章中,我们将继续介绍其他可调整和优化的地方。
LogReader Agent 顾名思义,它主要完成日志的读取,并写入分发的操作,下面我们介绍一些对于优化而言可操作的参数。
-LogScanThreshold
此项微软没有官方的解释,简单来说此项控制着LogReader Agent 一次扫描日志的条数,
默认值是500000,而扫描的频率是5秒钟,其中-PollingInterval 参数控制着频率。
这个参数基本没有太大调整的必要,增大它的同时将加大一次提交大量数据到分发的时间
也会消耗单次的扫描时间,一般较快速的系统这个值是有富余的,但有个例外,对于使用如FusionIO 等IO卡的系统,
个人感觉可以进行一些调整,希望有相关设备的朋友可以提供一些实践结果。
-ReadBatchSize
此项为一次读取的最大事务数,默认值为500,有时候我们可以看到 如“2 transaction(s) with 12 command(s) were delivered.”
这样的提示,这个提示标示2个事务中包含12个命令。
-ReadBatchThreshold
此项与ReadBatchSize关系密切, 标示读取的命令数command(s) 默认值为 0。如果此参数未指定,
日志读取器代理会将此日志读取完毕 或者读到 -ReadBatchSize中指定的(事务数)为止。
根据你系统的实际情况,酌情的加大,并实时观察系统状况,作出调整。
-MaxCmdsInTran
调整此项会对因为大事物造成的延迟带来显著提升,但是同时也会失去事物的完整性。
简单来说就是此项指定在Logreader 将命令写入到分发数据库时,可分组到一个事务中的语句的最大数目。
默认值为 0,保持发布服务器的事务边界。设置此值,就会对超过此值的大事物进行拆分。
总结一下,
如果你的IO够快,可以尝试调整它,增加吞吐。
如果总是受到大事务延迟的困扰,可以尝试进行事物拆分。
其实,所谓优化就是寻找一个平衡,满足你想要的结果后的平衡。
未完待续。。。
![201206201126068828[8] 201206201126068828[8]](http://images0.cnblogs.com/blog/794483/201508/051803580016670.gif)
浙公网安备 33010602011771号