SQLServer 使用sp_repldone標識所有未分發的事務為已分發

來源:互聯網
上載者:User

標籤:cas   gravity   replica   ==   open   過程   sof   隊列   儲存   

原文:SQLServer 使用sp_repldone標識所有未分發的事務為已分發

對於發行集資料庫的資料大量操作時,會使日誌掃描並讀取太多,會導致分發堵塞很久。也有一些解決方案,參考 《SqlServer 複製中將大事務分成小事務分發》 , 《SqlServer大量更新引起同步鏈延時問題》 。當然也可以使這些資料不分發,尤其是新表,資料尚未讓使用者使用,可以在日誌讀取器跳過掃描標識為 “複製” 的事務。


注: 以下類比操作,操作都在發行集資料庫執行!


1. 將佇列讀取器代理程式  -Continuous 去掉,使日誌讀取器不連續掃描交易記錄
2. 更新資料
3. 啟用日誌讀取器,資料正常同步到訂閱中
4. 再次更新資料,執行以下操作


將佇列讀取器代理程式  -Continuous 去掉的操作如下:



過程指令碼如下,不詳細說明:

--  因為日誌讀取器停止,分發表還沒有剛才更新的記錄SELECT * FROM distribution.dbo.MSrepl_commandsSELECT * FROM distribution.dbo.MSrepl_transactions--  但是交易記錄中標識為複製(REPLICATE) 的日誌增多了SELECT count(*) FROM ::fn_dblog(NULL, NULL) WHERE Description='REPLICATE'--  查看最早的分布式和非分布式複製事務--  https://msdn.microsoft.com/zh-cn/library/ms182792.aspxDBCC OPENTRAN() WITH TABLERESULTS; REPL_DIST_OLD_LSN    (535:23:10)REPL_NONDIST_OLD_LSN    (535:26:1)--  轉換上面的整數為16進位SELECT cast(cast(535 as int) as binary(4)) + cast(cast(23 as int) as binary(4)) + cast(cast(10 as int) as binary(2))SELECT cast(cast(535 as int) as binary(4)) + cast(cast(26 as int) as binary(4)) + cast(cast(1 as int) as binary(2))(534:2536:18) >>> 0x00000217:00000017:000A(534:2552:1) >>>  0x00000217:0000001A:0001--  在交易記錄中的記錄select [Current LSN],[Operation],[Transaction ID],Left([Description],20)from::fn_dblog('0x00000217:00000017:000A','0x00000217:0000001A:0001')    --  將交易記錄中標識為複製的記錄全部標記為已分發,之後日誌讀取器將不掃描這些記錄--  ( 只有當 xactid 和 xact_seqno 都為 NULL 時,reset 才有效。)--  https://msdn.microsoft.com/zh-cn/library/ms173775.aspxexec sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1@reset = 1 則日誌中所有複製的事務將標記為已分發;@reset = 0 則交易記錄將重設為第一個複製的事務,事務將重新讀取和發布;--  查看當前沒有分發的事務(保留在交易記錄中尚未發送到散發者的事務)--  https://msdn.microsoft.com/zh-cn/library/ms175114.aspxexec sp_replshowcmds--  再查看開啟的事務,事務也不存在了dbcc opentran () with tableresults; --  重新整理項目緩衝(為提高效率,項目定義儲存在緩衝中)--  https://msdn.microsoft.com/zh-cn/library/ms174992(v=sql.120).aspxexec sp_replflush--  此時再次更新其他行資料,啟用記錄讀取器代理程式,該行資料能正常同步到訂閱;之前未同步的,則不會同步.

最後把 -Continuous 添加會日誌讀取器中!完成!(或者停止記錄讀取器代理程式也可以)


參考:Using sp_repldone to mark all pending transactions as having been Replicated


SQLServer 使用sp_repldone標識所有未分發的事務為已分發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.