時(shí)間:2024-03-26 14:33作者:下載吧人氣:25
本文我們通過(guò)SQL Server 2016一個(gè)實(shí)例數(shù)據(jù)表,給大家詳細(xì)分析了快照代理過(guò)程遇到的問題和解決辦法,并對(duì)快照生成過(guò)程做了詳細(xì)說(shuō)明,以下是全部?jī)?nèi)容:
概述
快照代理準(zhǔn)備已發(fā)布表的架構(gòu)和初始數(shù)據(jù)文件以及其他對(duì)象、存儲(chǔ)快照文件并記錄分發(fā)數(shù)據(jù)庫(kù)中的同步信息。 快照代理在分發(fā)服務(wù)器上運(yùn)行;SQLServer2016版本對(duì)快照代理做了一些比較好的優(yōu)化,接下來(lái)詳細(xì)了解一下快照的執(zhí)行過(guò)程。
一、快照代理文件
在執(zhí)行快照作業(yè)是會(huì)在指定的快照目錄生成4種類型的文件。
BCP文件:發(fā)布對(duì)象的數(shù)據(jù)文件。
IDX文件:索引創(chuàng)建腳本文件
PRE文件:復(fù)制快照腳本文件。
SCH文件:架構(gòu)創(chuàng)建腳本文件
二、默認(rèn)快照代理配置文件
-BcpBachSize:每一次執(zhí)行bcp操作copy的最大記錄行數(shù),默認(rèn)是10萬(wàn)行。
-HistoryVerboseLevel:指定在快照操作過(guò)程中記錄的歷史記錄大小。
-LoginTimeout:登錄超時(shí)前等待的秒數(shù)。 默認(rèn)值為 15 秒。
-QueryTimeOut:查詢超時(shí)前等待的秒數(shù)。默認(rèn)值為 1800 秒
備注:通過(guò)右鍵快照代理-快照代理配置文件;可以配置快照代理。
三、對(duì)比不同版本快照代理
接下來(lái)測(cè)試對(duì)比2億的記錄表生成快照
1.bcp文件數(shù)量對(duì)比
2008R2
2016SP1
這里重點(diǎn)說(shuō)一下BCP文件,因?yàn)閼?yīng)用快照到訂閱服務(wù)器是以BCP文件為基本單位,也就是說(shuō)不管你的BCP文件有多大都是一次性bulk到訂閱服務(wù)器,所以BCP文件越大每次應(yīng)用的時(shí)間就會(huì)越長(zhǎng)。如果一個(gè)BCP文件太大可能會(huì)導(dǎo)致插入到訂閱端失敗。
從上圖可以看到同樣是2億的記錄,2008R2總共有8個(gè)BCP文件,而且最大的BCP文件大小將近1G其它的都才幾兆;2016有16個(gè)BCP文件,并且前15個(gè)都是50M左右數(shù)據(jù)比較均勻。接下來(lái)看下圖的每個(gè)BCP文件的記錄對(duì)比。
2.快照生成詳細(xì)過(guò)程對(duì)比
2008r2
2016SP1
從生成的BCP文件記錄對(duì)比來(lái)看:
2008R2:前7個(gè)文件每個(gè)文件記錄數(shù)大概70萬(wàn)左右,最后一個(gè)文件記錄1.1億。
2016:前15個(gè)文件每個(gè)文件記錄700萬(wàn)左右,最后一個(gè)文件78萬(wàn)。
說(shuō)明:
2008R2前7個(gè)文件每個(gè)文件大概存儲(chǔ)的記錄量是70萬(wàn)剩下的記錄都會(huì)存儲(chǔ)到最后一個(gè)文件,所以2008R2比較適合的表記錄數(shù)是600萬(wàn)左右。
2016前15個(gè)文件每個(gè)文件大概存儲(chǔ)的記錄量是700萬(wàn)剩下的記錄都會(huì)存儲(chǔ)到最后一個(gè)文件,2016適合的表記錄數(shù)1.2億左右。
共同缺點(diǎn):表記錄超過(guò)“適合的復(fù)制表記錄數(shù)”后剩下數(shù)據(jù)會(huì)全部存儲(chǔ)到最后個(gè)bcp文件中。
3.分發(fā)對(duì)比
接下來(lái)看一下分發(fā)的詳細(xì)過(guò)程
從2008R2分發(fā)記錄過(guò)程中可以看到每次BULK都是以bcp文件為單位,復(fù)制最后一個(gè)bcp文件花費(fèi)了大概22分鐘,而前面的每個(gè)文件都是十幾秒;還是由于我當(dāng)前的表只有三個(gè)字段而且除了主鍵沒有索引否則的時(shí)間就更長(zhǎng)了。
四、快照生成過(guò)程
復(fù)制快照代理是一個(gè)可執(zhí)行文件,用于準(zhǔn)備快照文件(其中包含已發(fā)布表和數(shù)據(jù)庫(kù)對(duì)象的架構(gòu)及數(shù)據(jù)),然后將這些文件存儲(chǔ)在快照文件夾中,并在分發(fā)數(shù)據(jù)庫(kù)中記錄同步作業(yè)。
從上圖可以了解整個(gè)快照的生成過(guò)程。
五、語(yǔ)法
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]
網(wǎng)友評(píng)論