SQL Server提高事务复制效率优化(一)总体概述
- 使用SSD磁盘,有钱的可以使用PCI-e卡,SSD做RAID10,所有节点部署在内网。
- 更改事务隔离级别为READ_COMMITTED_SNAPSHOT。说实话,SQL Server默认事务隔离级别是读已提交,但是没有多版本的概念,需要设置为READ_COMMITTED_SNAPSHOT才是我们理解上的读已提交。如果不设置这个,照样会读写互相阻塞。
- 在创建订阅之前,先将目标数据库的恢复模式改成简单,能够减少日志
ALTER DATABASE [数据库名称] SET RECOVERY SIMPLE WITH NO_WAIT
2.发布、订阅设计:
- 仅发布需要的数据,对于将日志写入数据库而且还要同步复制的,DBA可直接拒绝。
- 表中存在大量非聚集索引,发布时可以不勾选复制非聚集索引选项。经过测试,虽然数据库引擎是在应用完快照最后创建索引的,但创建时间很长,有时甚至会出错。可以在后期手工建立。我们采用导出脚本方式,然后只保留非聚集索引的脚本在订阅库中建立。
- 如果资源允许,单独建立一个分发服务器。发布和分发服务器在一个服务器上会增加性能损耗,尤其是分发服务器下面有多个订阅服务器时。
- 分发库默认是distribution库,会有专门的作业对该库进行清理,名字就叫“分发清除:distribution”。但这个进程清除分发库的效率太低了,会导致分发库积累大量数据,需要修改运行间隔和每次清楚的数据量。详见之前的随笔:distribution库过大的问题
- 合理使用订阅方式,如果选择推送订阅,势必加大分发服务器的压力,但延迟低 ;如果选择请求订阅,代理服务是在订阅服务器上,减少了分发服务器压力,但延迟会增加。
- 快照代理的生成。对于生成几百GB数据库的快照,采用SSD盘可能在10分钟左右。但会造成很高的性能损耗,要在业务非高峰期生成快照。快照代理文件也要放在SSD盘上,如果资源允许,单独一个驱动盘也可以。
- 如果已经有备份了,那么可以通过备份直接来初始化订阅,省去了生成快照和应用快照的步骤。
- 新发布新的表对象,对于发布库很大的情况下重新初始化是不实际的,可以增量发布,详见sqlserver同步后在不重新初始化快照的情况下新增表
- 对于已发布的表有批处理更新,一种方法是将批量更新分成若干小批量执行,减小事务处理的数据量;另一种方法是通过存储过程执行更改,并将存储过程发布。推荐第一种
- 将项目分布在多个发不上,这样相当于变向的实现了多线程并行发布,当然也可以通过参数实现并行,下面会讲到
- 降低复制代理的详细级别,在初始测试、监视或调试期间除外。 减小分发代理或合并代理的 –HistoryVerboseLevel 参数和 –OutputVerboseLevel 参数。这样可以减少为跟踪代理历史记录和输出而插入的新行数。相反,具有相同状态的以前的历史记录消息将更新为新的历史记录信息。提高测试、监视和调试的详细级别,这样就可以获得有关代理活动的尽可能多的信息。在系统开销不是很大的情况下,建议使用默认值1,本身这点对性能消耗可以忽略。
- 增大快照代理的BcpBatchSize参数,-BcpBatch参数表示一个批事务的行数。
- 将快照代理的- MaxNetworkOptimization设置为1,减少将不必要的信息发送到订阅服务器上。
- 使用快照代理、分发代理的 –MaxBcpThreads 参数(指定的线程数不应超过计算机上的处理器数)。此参数指定创建和应用快照时可以并行执行的大容量复制操作的数目。
- 为分发代理使用 –SubscriptionStreams 参数。 –SubscriptionStreams 参数可以显著提高聚合复制吞吐量。它使到一台订阅服务器的多个连接可以并行应用批量更改,同时在使用单线程时保持多个事务特征的存在。如果有一个连接无法执行或提交,则所有连接将中止当前批处理,而且代理将用单独的流重试失败的批处理。在重试阶段完成之前,订阅服务器上会存在临时事务不一致。失败的批处理成功提交后,订阅服务器将恢复到事务一致状态。官方文档有这个参数,但增加这个参数报错。
- 增大分发代理的 -CommitBatchSize 和CommitBatchThreshold参数的值。 提交一组事务的开销是固定的;通过不经常提交大量事务,就可以将开销分散在大量数据上。但是,增大此参数的优势因应用更改的开销由其他因素(例如包含日志的最大磁盘 I/O)限制而降低。另外,需要考虑以下权衡问题:任何导致分发代理重新开始的失败必须回滚并重新应用大量事务。对于不可靠的网络,越小的值导致失败的几率越小,如果导致失败,将回滚并重新应用较少量事务。
- 增大日志读取器代理的 -ReadBatchSize 参数的值。-ReadBatchSize 表示日志读取器代理和分发代理支持事务读取和提交操作的批大小。批大小的默认值为 500 个事务。日志读取器代理从日志中读取特定数量的事务,而不管这些事务是否标记为复制。将大量事务写入发布数据库,而其中只有一小部分标记为复制时,则应使用 -ReadBatchSize 参数增加日志读取器代理的读取批大小。此参数不适用于 Oracle 发布服务器。
- 为日志读取器代理使用 –MaxCmdsInTran 参数。–MaxCmdsInTran 参数指定日志读取器向分发数据库写入命令时组成一个事务的语句的最大数量。使用此参数能够使日志读取器代理和分发代理在订阅服务器上应用命令时将发布服务器上的大事务(由许多命令组成)分成若干个较小的事务。指定此参数可以减少分发服务器的争用问题并缩短发布服务器与订阅服务器之间的滞后时间。由于初始事务是以较小的单元应用的,订阅服务器可以在初始事务结束之前访问一个较大的逻辑发布服务器事务的行,因而会破坏事务的原子性。默认值为 0,这将保持发布服务器的事务边界。官方文档有该参数,但实际设置里面没有。
- 减小日志读取器代理和分发代理的 -PollingInterval 参数的值。 -PollingInterval 参数指定为要复制的事务查询已发布数据库的事务日志的频率。默认值为 5 秒。如果减小此值,日志的轮询将更加频繁,这会使事务从发布数据库传递到分发数据库的滞后时间较低。但是,应该对较低滞后时间的需要和因频繁轮询导致的服务器上增加的负荷之间进行平衡。
SQL Server提高事务复制效率优化(一)总体概述的更多相关文章
- SQL Server提高事务复制效率优化(四)修改数据同步过程优化
1.原理 我说的数据修改同步过程指的是在快照生成完毕,分发代理将快照应用于订阅服务器完成订阅服务器初始化后,发布服务器后续的更改同步到订阅服务器过程,这也就是我们常常关注的延迟.此过程主要 ...
- SQL Server提高事务复制效率优化(二)快照初始化优化
测试数据表量1500w+,使用初始化默认的快照代理参数,复制的三个过程包括快照初始化,订阅初始化和数据修改复制,主要对快照代理.分发代理.日志读取代理分别作了参数优化,并给出优化前后的对照实验测试. ...
- SQL Server提高事务复制效率优化(三)订阅初始化优化
初始化订阅主要是由分发代理分发和应用快照代理之前生成的快照,所以优化的主体是分发代理. 1.初始化订阅 首先在本地创建一个订阅,发布服务器.分发服务器和订阅服务器都在同一台服务器上,仅为了测试生产环境 ...
- SQL Server 2000事务复制问题
2000现在用的估计不多了,把之前收集的一些复制问题整理发布出来.可能都是些很白很二的问题,但人总是由最初的无知不断成长●-● SQL Server 2000事务复制问题服务器A(发布) 服务器B(分 ...
- SQL Server提高并发查询效率
同事写了个程序用创建多个线程使用ado同时对同个数据库进行相同的查询,涉及2张数据表的联查.当线程数非常多的情况下,读取数据的效率就会变得很慢,例如50个线程同时查询大概3000条数据,查询完成后通过 ...
- Sql Server 2012 事务复制遇到的问题及解决方式
1.订阅服务器提示:作业失败.无法确定所有者 WIN-01Q6JB46CHV\Administrator(拥有作业XXX)是否有服务器访问权限(原因:无法获取有关 Windows NT 组/用户'WI ...
- SQL Server 2005同步复制
原文:SQL Server 2005同步复制 以下实现复制步骤(以快照复制为例) 运行平台SQL SERVER 2005 一.准备工作: 1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密 ...
- SQL Server 之 事务与隔离级别实例讲解
SQL Server 之 事务与隔离级别实例讲解 SQL Server 实现了6个隔离级别来防止并发情况下,类似企图并发的访问或修改同一数据时问题的发生.本文将带你体验全部6个隔离级别.正如你接下来将 ...
- 通过SQL Server 2008数据库复制实现数据库同步备份
SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...
随机推荐
- login
package addresslist; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.event.Act ...
- Inventor 2014 sp1/sp2激活
问题: win8.1 inventor2014,不打补丁不兼容: 打了补丁xforce激活始终无法成功. 解决: 1. 使用未打补丁之前的 adlmact.dll 和 adlmact_libFNP.d ...
- AspNetPager控件报错误: Syntax error, unrecognized expression: input#ctl00$ContentPlaceHolder1$Aspnetpager1_input问题解决[摘]
高版本IE,如IE10或者IE11在浏览页面时出现错误: Syntax error, unrecognized expression: input#ctl00$ContentPlaceHolder1$ ...
- 【python】pickle模块
持久性的基本思想很简单.假定有一个 Python 程序,它可能是一个管理日常待办事项的程序,您希望在多次执行这个程序之间可以保存应用程序对象(待办事项).换句话说,您希望将对象存储在磁盘上,便于以后检 ...
- [综]隐马尔可夫模型Hidden Markov Model (HMM)
http://www.zhihu.com/question/20962240 Yang Eninala杜克大学 生物化学博士 线性代数 收录于 编辑推荐 •2216 人赞同 ×××××11月22日已更 ...
- VR外包团队:VR和AR技术已经红得发紫
近6个月以来,VR和AR技术已经红得发紫. 不管是创业公司还是互联网巨头,如果不在VR领域有所涉猎,都不好意思跟外界打招呼.最近,阿里巴巴公布VR战略并推出了一条VR购物的视频,更是给业界打了满满一碗 ...
- 动画--问题追踪:ImageView执行缩放动画ScaleAnimation之后,图像显示不全的问题。
http://www.bkjia.com/Androidjc/929473.html: 问题追踪:ImageView执行缩放动画ScaleAnimation之后,图像显示不全的问题., 问题:我有一个 ...
- shared_ptr 线程安全
Then what's really happening is TWO different sections of memory are being allocated. It's done at o ...
- ACM入门
1.给n个数字,将它们重新排序得到一个最大的数字 例子 4123 124 56 90--------------90561241235123 124 56 90 9------------990561 ...
- windows10降低IE版本
win10支持的最低IE版本为IE10,现在IE最新版本为IE11,而win10自带的浏览器是microsoft EDGE ,这给 以前的老系统带来很多不便,为了支持以前的老系统,只有降低IE浏览器 ...