SqlServer 複製中將大事務分成小事務分發,sqlserver中將

來源:互聯網
上載者:User

SqlServer 複製中將大事務分成小事務分發,sqlserver中將


在sql server 複製中,當在發行集資料庫執行1個大事務時,如一次性操作 十萬或百萬以上的資料。當操作資料在發行集資料庫執行完成後 ,記錄讀取器代理程式將掃描交易記錄,一次性傳遞到散發資料庫中。若上個事務未傳遞完成,連續執行多個事務,記錄讀取器代理程式將掃描日誌中多個事務同時傳遞到散發資料庫中,預設最大掃描500個事務。如果執行多次上百萬或千萬的資料將堵塞很久。


記錄讀取器代理程式可配置將大事務劃分為多個小事務進行傳遞到散發資料庫中,分發隊列則按照小事務分發到訂閱資料庫中,這樣資料就很快同步!


在沒改代理參數之前,本人執行1次插入30萬的資料到發行資料表中。插入完成後,監控發布到分發的記錄如下:


可以看到,這1個事務的命令都得一次傳遞完才能分發,而分發又消耗時間,這裡等待太久影響事務的即時性。

如果還有其他事務,預設500(參考參數:-ReadBatchSize),也將一起傳遞,耗時較長。


現在更改參數,掃描到 1000 左右的命令就即時分發,需要設定如下參數:

-MaxCmdsInTran number_of_commands



註:該參數只能添加到記錄讀取器代理程式中,在代理設定檔沒有此參數的設定。


添加後重啟 記錄讀取器代理程式。

再次插入 30 萬的資料!~到監視器查看



可以看到,命令達到 1000 左右就進行分發了,此時查看訂閱資料庫,資料也同步過來了,這樣就省去了較多掃描命令的時間。



這個參數雖好,但是也可能引起資料的一致性。

如:

 在發布更新了一批資料,但是訂閱查詢時卻有不同。

分發事務遇到衝突或者死結,也導致這部分的資料不一致。


參考:複製記錄讀取器代理程式



相關文章

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.