SqlServer 复制中将大事务分成小事务分发的方法

 更新时间:2016年11月28日 21:58:52   投稿:mdxy-dxy  
日志读取器代理可配置将大事务划分为多个小事务进行传递到分发数据库中,分发队列则按照小事务分发到订阅数据库中,这样数据就很快同步

在sql server 复制中,当在发布数据库执行1个大事务时,如一次性操作 十万或百万以上的数据。当操作数据在发布数据库执行完成后 ,日志读取器代理将扫描事务日志,一次性传递到分发数据库中。若上个事务未传递完成,连续执行多个事务,日志读取器代理将扫描日志中多个事务同时传递到分发数据库中,默认最大扫描500个事务。如果执行多次上百万或千万的数据将堵塞很久。

日志读取器代理可配置将大事务划分为多个小事务进行传递到分发数据库中,分发队列则按照小事务分发到订阅数据库中,这样数据就很快同步!

在没改代理参数之前,本人执行1次插入30万的数据到发布表中。插入完成后,监控发布到分发的记录如下:

可以看到,这1个事务的命令都得一次传递完才能分发,而分发又消耗时间,这里等待太久影响事务的实时性。
如果还有其他事务,默认500(参考参数:-ReadBatchSize),也将一起传递,耗时较长。

现在更改参数,扫描到 1000 左右的命令就即时分发,需要设置如下参数:
-MaxCmdsInTran number_of_commands

注:该参数只能添加到日志读取器代理中,在代理配置文件没有此参数的设置。

添加后重启 日志读取器代理。

再次插入 30 万的数据!~到监视器查看

可以看到,命令达到 1000 左右就进行分发了,此时查看订阅数据库,数据也同步过来了,这样就省去了较多扫描命令的时间。
更详细查看每个事务的命令数,如下:

SELECT top 10 A.xact_seqno,A.entry_time,COUNT(*) AS cmds
FROM distribution.dbo.MSrepl_transactions A(NOLOCK) 
INNER JOIN distribution.dbo.MSrepl_commands B(NOLOCK) 
ON A.xact_seqno=B.xact_seqno
GROUP BY A.xact_seqno,A.entry_time
ORDER BY cmds DESC

这个参数虽好,但是也可能引起数据的一致性。

如:

在发布更新了一批数据,但是订阅查询时却有不同。

分发事务遇到冲突或者死锁,也导致这部分的数据不一致。

参考:复制日志读取器代理

相关文章

  • mssql 建立索引

    mssql 建立索引

    假设你想找到本书中的某一个句子。你可以一页一页地逐页搜索,但这会花很多时间。而通过使用本书的索引,你可以很快地找到你要搜索的主题。
    2009-04-04
  • MSSQL数据库占用内存过大造成服务器死机问题的解决方法

    MSSQL数据库占用内存过大造成服务器死机问题的解决方法

    有时候我们的服务器使用MSSQL数据库,但如果MSSQL数据库占用内存过大可能导致服务器死机,这里分享下解决方法, 需要的朋友可以参考下
    2013-07-07
  • sql server日期相减 的实现详解

    sql server日期相减 的实现详解

    本篇文章是对sql server日期相减的实现进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • SQL Server 数据太多优化的方法

    SQL Server 数据太多优化的方法

    本文介绍了几种优化SQLServer数据库性能的方法,包括索引优化、数据分区和分表、数据归档、存储和硬件优化、数据库参数和配置优化、批量数据处理、清理无用数据、使用缓存、并行查询与并发以及SQLServer实例优化,这些方法可以帮助在处理大量数据时保持较好的性能
    2024-11-11
  • Sql Server2016 正式版安装程序图解教程

    Sql Server2016 正式版安装程序图解教程

    这篇文章主要介绍了sql server2016 正式版安装程序图的相关资料,本文给大家提供了安装包的下载地址,对sql server 2016安装的过程感兴趣的朋友可以参考下
    2016-09-09
  • sqlserver 中时间为空的处理小结

    sqlserver 中时间为空的处理小结

    sql server中常常需要使用DateTime类型的字段。当此类型字段值为空时,常常出现各种异常
    2011-10-10
  • SQL DCL数据控制语言的使用

    SQL DCL数据控制语言的使用

    本文主要介绍了SQL DCL数据控制语言的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • SQL SERVER 中构建执行动态SQL语句的方法

    SQL SERVER 中构建执行动态SQL语句的方法

    这篇文章主要介绍了SQL SERVER 中构建执行动态SQL语句的方法,需要的朋友可以参考下
    2017-06-06
  • SQL server数据库declare和set用法技巧小结

    SQL server数据库declare和set用法技巧小结

    这篇文章主要给大家介绍了关于SQL server数据库declare和set用法技巧的相关资料,在SQL Server中,DECLARE用于声明变量和存储过程中的参数,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 将Reporting services的RDL文件拷贝到另外一台机器时报Data at the root level is invalid的解决方法

    将Reporting services的RDL文件拷贝到另外一台机器时报Data at the root level i

    在本机开发了一个Reporting后拷贝到服务器,然后在Sql Server Business Intelligence Development Studio中添加再打开后会报Data at the root level is invalid.错误
    2012-06-06

最新评论