SQL Server Transactional Replication 中的 CommitBatchSize 和 CommitBatchThreshold 屬性

來源:互聯網
上載者:User
最近遇到一個在SQL Server transactional replication 裡關於CommitBatchSize 和CommitBatchThreshold設定的問題,BOL裡面的解釋很含糊:

  • CommitBatchSize “Is the number of transactions to be issued to the Subscriber before a COMMIT statement is issued. The default is 100.”
  • CommitBatchThreshold “Is the number of replication commands to be issued to the Subscriber before a COMMIT statement is issued. The default is 1000.”

有一個老外做了詳細的測試結果總結了關於這兩個屬性的作用,詳情見:
http://kendalvandyke.blogspot.com/2008/11/how-commitbatchsize-and.html

根據我自己的分析,這兩個屬性的作用如下:

  1. Distrabution Agent 將所有單條命令作為一個單位,CommitBatchThreshold和CommitBatchSize 是以單條命令數為標準
  2. 如果一個語句更新N條記錄,這條語句視為在一個transaction中。但是命令數為N。
  3. 如果命令在一個transaction中,不考慮CommitBatchSize ,只考慮CommitBatchThreshold。
  4. 單個transaction不會被拆分成多個,就算單個transaction中的命令數超過CommitBatchThreshold。
  5. 如果提交多個transaction,第一個transaction 的命令數沒有超出CommitBatchThreshold,則第二個transaction 會被合并如第一個。如果合并後的命令數超出CommitBatchThreshold,則不繼續合并,但是前兩個transactions照樣提交。
  6. 如果命令不在一個transaction中,按照CommitBatchSize的設定將一定數量的命令合并成一個transaction。
  7. 如果CommitBatchSize的值大於CommitBatchThreshold,一個CommitBatchSize的transaction會被進一步拆分成兩個,比如CommitBatchSize=5,CommitBatchThreshold=3,總命令數為10,會如下打包 4,1,4,1。為什麼會出現4,請參見第5條,因為第一個包的命令數在向後合并中到第四個命令才超過CommitBatchThreshold。於是一個CommitBatchSize的transaction 被分成兩個 4,1。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.