1、原理
      我说的数据修改同步过程指的是在快照生成完毕,分发代理将快照应用于订阅服务器完成订阅服务器初始化后,发布服务器后续的更改同步到订阅服务器过程,这也就是我们常常关注的延迟。此过程主要涉及两个代理,分发代理和日志读取代理,因为我们使用的是推送订阅,所以这两个代理都工作在分发数据库上。首先,日志读取代理读取发布事务日志,并表示任何INSERT、UPDATE以及DELETE语句,然后将这些事务定时将批量复制到分发服务器的分发数据库中。分发库中存储着事务和命令,每个事务以多条命令组成。分发代理顺序分发分法库中的事务,以逻辑命令(SQL语句)方式在订阅库上执行。流程图见下:
     优化这两个代理主要考虑从两方面考虑,一方面是缩短每个批次的间隔,一方面需要在小间隔的情况下增加代理处理的性能,这两个方面是相关联的,所以要一起修改才能起作用。
2.复制延迟测试
  • 查看日志读取代理配置文件的默认参数:
  • 查看分发代理配置文件的默认参数:
SELECT * FROM msdb.dbo .MSagent_profiles WHERE agent_type =3
SELECT * FROM MSagent_parameters WHERE profile_id= 4

  • 通过跟踪令牌方式测试复制延迟时间

3.代理参数优化测试
  • 新建日志读取代理参数配置文件,命名为“日志读取代理参数优化参数 ”
  • 日志读取代理参数优化
-- 查询该代理的profile_id
SELECT * FROM msdb.dbo .MSagent_profiles WHERE agent_type =2 EXEC sp_change_agent_parameter @profile_id = 20,
@parameter_name = 'ReadBatchSize', @parameter_value = 2000 EXEC sp_change_agent_parameter @profile_id = 20,
@parameter_name = 'PollingInterval', @parameter_value = 1
新建分发参数配置文件,命名为“分发代理参数优化参数”
EXEC sp_change_agent_parameter @profile_id = 18,
@parameter_name = 'PollingInterval', @parameter_value = 1 EXEC sp_change_agent_parameter @profile_id = 18,
@parameter_name = 'CommitBatchSize', @parameter_value = 1000 EXEC sp_change_agent_parameter @profile_id = 18,
@parameter_name = 'CommitBatchThreshold', @parameter_value = 10000
  • 优化参数后测试结果(记得更改代理配置文件后要重启代理生效),效果立竿见影,但是不是峰值情况。我们在生产上应用的效果很好,高峰值时也能保证很低的延迟。对于CommitBatchSize和CommitBatchThreshold的参数设置评估方法,CommitBatchThreshold取DML操作数/s上限作为设置,CommitBatch就是CommitBatchThreshold/10~CommitBatchThreshold/5。
 

SQL Server提高事务复制效率优化(四)修改数据同步过程优化的更多相关文章

  1. SQL Server提高事务复制效率优化(一)总体概述

      随着公司业务的发展,数据量增长迅速,在解决Scale Out的同时,还要考虑到主从的复制延迟问题,尽量降到1s以内满足线上业务,如果不调整,SQL Server默认的配置可能平均要3s左右.生产的 ...

  2. SQL Server提高事务复制效率优化(二)快照初始化优化

    测试数据表量1500w+,使用初始化默认的快照代理参数,复制的三个过程包括快照初始化,订阅初始化和数据修改复制,主要对快照代理.分发代理.日志读取代理分别作了参数优化,并给出优化前后的对照实验测试. ...

  3. SQL Server提高事务复制效率优化(三)订阅初始化优化

    初始化订阅主要是由分发代理分发和应用快照代理之前生成的快照,所以优化的主体是分发代理. 1.初始化订阅 首先在本地创建一个订阅,发布服务器.分发服务器和订阅服务器都在同一台服务器上,仅为了测试生产环境 ...

  4. SQL Server 2000事务复制问题

    2000现在用的估计不多了,把之前收集的一些复制问题整理发布出来.可能都是些很白很二的问题,但人总是由最初的无知不断成长●-● SQL Server 2000事务复制问题服务器A(发布) 服务器B(分 ...

  5. SQL Server提高并发查询效率

    同事写了个程序用创建多个线程使用ado同时对同个数据库进行相同的查询,涉及2张数据表的联查.当线程数非常多的情况下,读取数据的效率就会变得很慢,例如50个线程同时查询大概3000条数据,查询完成后通过 ...

  6. Sql Server 2012 事务复制遇到的问题及解决方式

    1.订阅服务器提示:作业失败.无法确定所有者 WIN-01Q6JB46CHV\Administrator(拥有作业XXX)是否有服务器访问权限(原因:无法获取有关 Windows NT 组/用户'WI ...

  7. SQL SERVER 2012 第五章 创建和修改数据表 の CREATE语句

    CREATE <object type> <object name> CREATE DATABASE <database name> 比较完整的语法列表: 日志文件 ...

  8. SQL SERVER 2012 第五章 创建和修改数据表 の SQL SERVER中的对象名

    [ServerName.[DataBaseName.[SchemeName.]]]ObjectName 服务器名,数据库名,模式名,对象名 其中模式是一个新出的坑爹的东西.

  9. SQL Server 之 事务与隔离级别实例讲解

    SQL Server 之 事务与隔离级别实例讲解 SQL Server 实现了6个隔离级别来防止并发情况下,类似企图并发的访问或修改同一数据时问题的发生.本文将带你体验全部6个隔离级别.正如你接下来将 ...

随机推荐

  1. SQLSERVER系统视图,系统表,sys.sql_modules视图

    SQLServer中提供了相当丰富的系统视图,能够从宏观到微观,从静态到动态反应数据库对象的存储结果.系统性能.系统等待事件等等.同时 也保留了与早期版本兼容性的视图,主要差别在于SQLServer2 ...

  2. oracle基础教程(8)oracle修改字符集

    oracle基础教程(8)oracle修改字符集 1.用dba连接数据库 -->sqlplus / as sysdba 2.查看字符集 -->SELECT parameter, value ...

  3. Jquery 防止页面刷新

    1.禁止鼠标右键功能$(document).ready(function() { $(document).bind("contextmenu",function(e) { aler ...

  4. 查看Visual Studio异常内容

    If Entity Framework throws a validation exception when saving, Visual Studio reports the message, Va ...

  5. 将 ASP.NET MVC3 Razor 项目部署到虚拟主机中

    国内很多网站空间都只支持.NET 2.0 和 .NET 3.0 3.5,很少有空间商支持.NET 4的,即使有个别支持.NET 4,但是不支持MVC的默认路由访问形式. Go Daddy 的主机支持, ...

  6. android-23 View.java - dispatchTouchEvent源码

    public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource { /** * ...

  7. ios启动载入启动图片

    版本判断: 1.首先你要知道这个键值对的key:id key =   (id)kCFBundleVersionKey; 2.同过本地的NSBundle取得当前的版本号. 3.在沙盒中取得对应的版本号. ...

  8. 工具04_SQL Trace/DBMS_SYSTEM

    2014-06-25 Created By BaoXinjian

  9. 无废话WCF

    1.什么是WCF 2.WCF应用的通信过程 3.WCF宿主 4.WCF配置文件 5.WCF通信模式 6.一个简单的DEMO

  10. mysql中的模糊查询

    转载自:http://www.letuknowit.com/archives/90/ MySQL中实现模糊查询有2种方式:一是用LIKE/NOT LIKE,二是用REGEXP/NOT REGEXP(或 ...