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. weex环境搭建

    1. 安装weex-toolkit sudo npm install -g weex-toolkit 装完之后就可以使用weex命令了.输入weex命令可以看到: weex test.we --qr ...

  2. Python线程通信

    subprocess 作用 模块用于生产新的进程,连接到其输入.输出.错误管道,并获取其返回值 1. 如何使用subprocess模块 启动子进程的推荐方法是使用以下方便功能. 对于更高级的用例,当这 ...

  3. linux根文件系统制作

    在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系统的错误. 那么根文件系统在系统启动中到底是什么时候挂载的呢?先将/dev/ram0挂载,而后执行/l ...

  4. ListMultimap 容器

    ListMultimap 最近翻flume源码,在用的容器.之前自己写代码的时候,还苦恼过有时候有这种需求,原来google的工程师都已经解决了这些问题,这很google. 记录下,有时间来总结下相应 ...

  5. Java高级开发工程师面试考纲 转

    转 http://www.sanesee.com/article/java-engineer-interview-of-content-tree 1 Java基础 1.1 Collection和Map ...

  6. ETL利器Kettle实战应用解析系列三 【ETL后台进程执行配置方式】

    本文主要阅读目录如下: 1.简介Kettle的Kitchen和Span 2.命令行调度任务配置方式 3.后台进程配置运行方式 4.Windows任务设置 5.Demo下载 1.简介Kettle的Kit ...

  7. Apache Shiro 简单概念

    Apache Shiro 是ASF旗下的一款开源软件(Shiro发音为"shee-roh",日语"堡垒(Castle)"的意思),提供了一个强大而灵活的安全框架 ...

  8. php入门part3

    php函数 php函数和JScript的函数大同小异,这里主要强调一下不同之处. 函数的定义:function函数名(形参类表){ 函数体 } 函数的调用:函数名(实参类表) 在php里函数可以先调用 ...

  9. 获取layer.open弹出层的返回值

    正在开发的车联网项目用到了layer API.当我在开发“新建电子围栏”的时候需要弹出地图,用户在地图中画一个区域,最后将这个弹出层的数据返回给原页面.下面是我的实现过:程: 触发弹出层的代码: la ...

  10. HBase读延迟的12种优化套路

    任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...