交易式複寫中,發布端執行百萬級大事務(如批次刪除/更新/插入),Log Reader Agent 須一次掃描完整事務日誌再整體傳遞至散發庫。預設最大掃描 500 事務(-ReadBatchSize),導致:
將大事務拆分為多個小命令批次分發,實現「邊掃描邊分發」,大幅降低延遲。
Log Reader Agent 作業(名稱含 LogReader)。 -MaxCmdsInTran 1000
調整前: 30 萬筆插入單事務,命令數 300,000 一次性傳遞。

調整後: 同 30 萬筆,每 ~1000 命令即分發一次,訂閱端近實時同步。

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

| 風險 | 成因 | 緩解措施 |
|---|---|---|
| 資料一致性暫時性破壞 | 大事務拆分導致訂閱端可見中間狀態 | 業務層面接受最終一致性;關鍵表避免超大事務 |
| 分發端衝突/死鎖 | 高頻小批次分發增加並發衝突機率 | 優化訂閱端索引;調大 -MaxCmdsInTran 減少批次數 |
| 異常回滾複雜化 | 部分批次已分發,發布端回滾需補償 | 監控警報;必要時重新初始化訂閱 |
-MaxCmdsInTran 是複寫大事務延遲的「銀彈」,配合 -ReadBatchSize、-PollingInterval 微調,可將百萬事務分發延遲從小時級壓縮至秒級。生產環境務必先在測試環境驗證業務影響再上線。