上游棋牌

雷雷猪>消息>正文

SQL Server 2016数据库快照代理过程详解

2019-03-17 14:29:36 [ 数据库 ] 分享

  本文我们通过SQL Server 2016一个实例数据表,给大家详细分析了快照代理过程遇到的问题和解决办法,并对快照生成过程做了详细说明,以下是全部内容:

  概述

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

一、快照代理文件

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

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

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

  PRE文件:快照脚本文件。

  SCH文件:架构创建脚本文件

二、默认快照代理配置文件

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

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

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

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

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

三、对比不同版本快照代理

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

上游棋牌  1。bcp文件数量对比

  2008R2

  2016SP1

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

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

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

  2008r2

  2016SP1

上游棋牌  从生成的BCP文件记录对比来看:

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

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

  说明:

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

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

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

  3.分发对比

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

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

四、快照生成过程

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

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

五、语法

上游棋牌  snapshot [ -?]

  -Publisher server_name[instance_name]

上游棋牌  -Publication publication_name

  [-70Subscribers]

  [-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]

  [-UsePerArticleContentsView use_per_article_contents_view]

  参数

  -?

上游棋牌  输出所有可用的参数。

  -Publisherserver_name[instance_name]

上游棋牌  发布服务器的名称。为该服务器上的MicrosoftSQL Server默认实例指定 server_name。为该服务器上的server_nameinstance_nameinstance_nameSQL Server默认实例指定 server_name。

  -Publication发布

  发布的名称。只有将发布设置为总是使快照可用于新订阅或重新初始化的订阅时,此参数才有效。

  -70Subscribers

上游棋牌  如果有任何订阅服务器在运行SQL Server7.0 版,则必须使用此参数。

  -BcpBatchSizebcpbatchsize

  在一次大容量操作中发送的行数。执行bcp in操作时,批的大小为要作为一个事务发送到服务器的行数,并且也是分发代理记录bcp进度消息之前必须发送的行数。当执行bcp out操作时,将使用固定批大小 1000。值为 0 表示不记录任何消息。

  -DefinitionFiledef_path_and_file_name

  代理定义文件的路径。代理定义文件中包含该代理的命令行参数。文件的内容被当作可执行文件进行分析。使用双引号 (") 指定包含任意字符的参数值。

  -Distributorserver_name[instance_name]

上游棋牌  分发服务器名称。为该服务器上的默认实例指定server_nameSQL Server。为该服务器上的server_nameinstance_nameinstance_nameSQL Server默认实例指定 server_name。

  -DistributorDeadlockPriority[-1|0|1]

  死锁发生时快照代理连接到分发服务器的优先级。指定此参数是为了解决快照生成期间在快照代理和用户应用程序之间发生的死锁问题。

  DistributorDeadlockPriority 值

  说明

  -1

上游棋牌  在分发服务器上发生死锁时,应用程序而非快照代理优先。

  0(默认值)

  未分配优先级。

  1

  在分发服务器上发生死锁时,快照代理优先。

  -DistributorLogindistributor_login

  使用SQL Server身份验证连接到分发服务器时所用的登录名。

声明:本站部分资源来源于网络,版权归原作者或者来源机构所有,如作者或来源机构不同意本站转载采用,请通知我们,我们将第一时间删除内容。本站刊载文章出于传递更多信息之目的,所刊文章观点仅代表作者本人观点,并不意味着本站赞同作者观点或证实其描述,其原创性及对文章内容的真实性、完整性、及时性本站亦不作任何保证或承诺,请读者仅作参考。
编辑: