SQL Server 2016快照代理的示例分析

  介绍

这篇文章主要介绍SQL Server 2016快照代理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

概述

,快照代理准备已发布表的架构和初始数据文件以及其他对象,存储快照文件并记录分发数据库中的同步信息。快照代理在分发服务器上运行;SQLServer2016版本对快照代理做了一些比较好的优化,接下来详细了解一下快照的执行过程。

<强>一、快照代理文件

在执行快照作业是会在指定的快照目录生成4种类型的文件。

BCP文件:发布对象的数据文件。

IDX文件:索引创建脚本文件

PRE文件:复制快照脚本文件。

同步信道文件:架构创建脚本文件

<强>二,默认快照代理配置文件

 SQL Server 2016快照代理的示例分析

-BcpBachSize:每一次执行BCP操作副本的最大记录行数,默认是10万行。

-HistoryVerboseLevel:指定在快照操作过程中记录的历史记录大小。

-LoginTimeout:登录超时前等待的秒数。默认值为15秒。

querytimeout:查询超时前等待的秒数。默认值为1800秒

,备注:通过右键快照代理——快照代理配置文件,可以配置快照代理。

<强>三,对比不同版本快照代理

接下来测试对比2个亿的记录表生成快照

1. BCP文件数量对比

2008 r2

,  SQL Server 2016快照代理的示例分析

2016 sp1

 SQL Server 2016快照代理的示例分析

这里重点说一下BCP文件,因为应用快照到订阅服务器是以BCP文件为基本单位,也就是说不管你的BCP文件有多大都是一次性散货到订阅服务器,所以BCP文件越大每次应用的时间就会越长。如果一个BCP文件太大可能会导致插入到订阅端失败。

从上图可以看到同样是2个亿的记录,2008 r2总共有8个BCP文件,而且最大的BCP文件大小将近1 g其它的都才几兆,2016有16个BCP文件,并且前15个都是50米左右数据比较均匀。接下来看下图的每个BCP文件的记录对比。

2。快照生成详细过程对比

2008 r2

 SQL Server 2016快照代理的示例分析

 SQL Server 2016快照代理的示例分析

2016 sp1

 SQL Server 2016快照代理的示例分析

从生成的BCP文件记录对比来看:

2008 r2:前7个文件每个文件记录数大概70年万左右,最后一个文件记录1.1亿。

2016:前15个文件每个文件记录700年万左右,最后一个文件78万。

说明:

2008 r2前7个文件每个文件大概存储的记录量是70年万剩下的记录都会存储到最后一个文件,所以2008 r2比较适合的表记录数是600年万左右。

2016前15个文件每个文件大概存储的记录量是700年万剩下的记录都会存储到最后一个文件,2016适合的表记录数1.2亿左右。

 SQL Server 2016快照代理的示例分析

共同缺点:表记录超过“适合的复制表记录数”后剩下数据会全部存储到最后个BCP文件中。

3。分发对比

接下来看一下分发的详细过程

 SQL Server 2016快照代理的示例分析

,从2008 r2分发记录过程中可以看到每次大部分都是以bcp文件为单位,复制最后一个bcp文件花费了大概22分钟,而前面的每个文件都是十几秒,还是由于我当前的表只有三个字段而且除了主键没有索引否则的时间就更长了。

<强>四,快照生成过程

复制快照代理是一个可执行文件,用于准备快照文件(其中包含已发布表和数据库对象的架构及数据),然后将这些文件存储在快照文件夹中,并在分发数据库中记录同步作业。

 SQL Server 2016快照代理的示例分析

从上图可以了解整个快照的生成过程。

<强>五、语法

 snapshot  (, - ?),,
  -Publisher  server_name [\ instance_name],,
  -Publication  publication_name ,
  (-70用户),,
  (-BcpBatchSize  bcp_batch_size),
  (-DefinitionFile  def_path_and_file_name),
  [-Distributor  server_name [\ instance_name]],
  [-DistributorDeadlockPriority  (1 | 0 | 1),),
  (-DistributorLogin  distributor_login),
  (-DistributorPassword  distributor_password),
  [-DistributorSecurityMode  [0 | 1],),
  (-DynamicFilterHostName  dynamic_filter_host_name),
  (-DynamicFilterLogin  dynamic_filter_login),
  (-DynamicSnapshotLocation  dynamic_snapshot_location),,
  [-EncryptionLevel  [0 | 1 | 2]],
  (-FieldDelimiter  field_delimiter),
  [-HistoryVerboseLevel  [0 | 1 | 2 | 3],),
  (-HRBcpBlocks  number_of_blocks ),
  (-HRBcpBlockSize  block_size ),
  (-HRBcpDynamicBlocks ),
  (-KeepAliveMessageInterval  keep_alive_interval),
  (-LoginTimeOut  login_time_out_seconds),
  (-MaxBcpThreads  number_of_threads ),
  [-MaxNetworkOptimization  [0 | 1]],
  (-Output  output_path_and_file_name),
  [-OutputVerboseLevel  [0 | 1 | 2],),
  (-PacketSize  packet_size),
  (-ProfileName  profile_name),
  (-PublisherDB  publisher_database),
  [-PublisherDeadlockPriority  (1 | 0 | 1),),
  [-PublisherFailoverPartner  server_name [\ instance_name],),
  (-PublisherLogin  publisher_login),
  (-PublisherPassword  publisher_password),,
  [-PublisherSecurityMode  [0 | 1],),
  (-QueryTimeOut  query_time_out_seconds),
  [-ReplicationType  [1 | 2],),
  (-RowDelimiter  row_delimiter),
  (-StartQueueTimeout  start_queue_timeout_seconds),
  null

SQL Server 2016快照代理的示例分析