SqlServer 復(fù)制中將大事務(wù)分成小事務(wù)分發(fā)的方法
在sql server 復(fù)制中,當(dāng)在發(fā)布數(shù)據(jù)庫執(zhí)行1個大事務(wù)時,如一次性操作 十萬或百萬以上的數(shù)據(jù)。當(dāng)操作數(shù)據(jù)在發(fā)布數(shù)據(jù)庫執(zhí)行完成后 ,日志讀取器代理將掃描事務(wù)日志,一次性傳遞到分發(fā)數(shù)據(jù)庫中。若上個事務(wù)未傳遞完成,連續(xù)執(zhí)行多個事務(wù),日志讀取器代理將掃描日志中多個事務(wù)同時傳遞到分發(fā)數(shù)據(jù)庫中,默認(rèn)最大掃描500個事務(wù)。如果執(zhí)行多次上百萬或千萬的數(shù)據(jù)將堵塞很久。
日志讀取器代理可配置將大事務(wù)劃分為多個小事務(wù)進(jìn)行傳遞到分發(fā)數(shù)據(jù)庫中,分發(fā)隊列則按照小事務(wù)分發(fā)到訂閱數(shù)據(jù)庫中,這樣數(shù)據(jù)就很快同步!
在沒改代理參數(shù)之前,本人執(zhí)行1次插入30萬的數(shù)據(jù)到發(fā)布表中。插入完成后,監(jiān)控發(fā)布到分發(fā)的記錄如下:
可以看到,這1個事務(wù)的命令都得一次傳遞完才能分發(fā),而分發(fā)又消耗時間,這里等待太久影響事務(wù)的實時性。
如果還有其他事務(wù),默認(rèn)500(參考參數(shù):-ReadBatchSize),也將一起傳遞,耗時較長。
現(xiàn)在更改參數(shù),掃描到 1000 左右的命令就即時分發(fā),需要設(shè)置如下參數(shù):
-MaxCmdsInTran number_of_commands
注:該參數(shù)只能添加到日志讀取器代理中,在代理配置文件沒有此參數(shù)的設(shè)置。
添加后重啟 日志讀取器代理。
再次插入 30 萬的數(shù)據(jù)!~到監(jiān)視器查看
可以看到,命令達(dá)到 1000 左右就進(jìn)行分發(fā)了,此時查看訂閱數(shù)據(jù)庫,數(shù)據(jù)也同步過來了,這樣就省去了較多掃描命令的時間。
更詳細(xì)查看每個事務(wù)的命令數(shù),如下:
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
這個參數(shù)雖好,但是也可能引起數(shù)據(jù)的一致性。
如:
在發(fā)布更新了一批數(shù)據(jù),但是訂閱查詢時卻有不同。
分發(fā)事務(wù)遇到?jīng)_突或者死鎖,也導(dǎo)致這部分的數(shù)據(jù)不一致。
相關(guān)文章
SQL Server 2005 還原數(shù)據(jù)庫錯誤解決方法
解決SQL Server 2005 還原數(shù)據(jù)庫錯誤:System.Data.SqlClient.SqlError: 在對 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BusinessDB.mdf' 嘗試 'RestoreContainer::ValidateTargetForCreation' 時,操作系統(tǒng)返回了錯誤 '5(拒絕訪問)'2009-03-03如何區(qū)分SQL數(shù)據(jù)庫中的主鍵與外鍵
這篇文章主要介紹了如何分清SQL數(shù)據(jù)庫中的主鍵與外鍵,這里簡單介紹下,方便需要的朋友2013-06-06SQL Server日期時間格式轉(zhuǎn)化的方式小結(jié)
在SQL Server中,日期格式轉(zhuǎn)換可以使用CONVERT函數(shù)和CAST函數(shù),本文呢給大家介紹了SQL Server日期時間格式轉(zhuǎn)化的方式,并通過代碼示例講解非常詳細(xì),需要的朋友可以參考下2024-03-03[圖文]三分鐘學(xué)會Sql Server的復(fù)制功能
有兩個服務(wù)器,裝了兩個數(shù)據(jù)庫,一個是主的,一個是備用的,下面的的功能就將主數(shù)據(jù)庫的數(shù)據(jù)庫,實時同步到備用數(shù)據(jù)庫上,使他們的數(shù)據(jù)內(nèi)容,基本上保持一致。2008-07-07SQL Server降權(quán)運行 SQL Server 2000以GUESTS權(quán)限運行設(shè)置方法
由于sql注入問題比較常見,很多黑客都是通過sqlserver數(shù)據(jù)庫漏洞直接獲取系統(tǒng)權(quán)限,所以sqlserver的安全設(shè)置尤為重要,簡單簡單分享下sqlserver低權(quán)限運行方法2014-07-07