複製代理說明: 複製代理執行許多與複製有關的任務,其中包括建立架構和數據副本、檢測發佈服務器或訂閱服務器上的更新以及在服務器之間傳播更改。 默認狀況下,複製代理在 Microsoft SQL Server 代理做業步驟下運行。 因爲這些代理徹底是可執行文件,所以能夠從命令行和批處理腳本直接調用它們。 每一個複製代理支持一組運行時參數,用於控制代理的運行方式;這些參數在代理配置文件或命令行中指定。能夠經過下圖來看複製代理相關的JOB與計劃:數據庫
清除做業緩存 |
說明服務器 |
默認調度架構 |
代理歷史記錄清除:分發ui |
從分發數據庫中刪除複製代理歷史記錄。spa |
每十分鐘運行一次命令行 |
分發清除:分發代理 |
從分發數據庫中刪除複製的事務。 停用在最大分發保持期內還沒有同步的訂閱。日誌 |
每十分鐘運行一次code |
過時訂閱清除 |
從發佈數據庫檢測和刪除過時的訂閱。 |
天天凌晨 1:00 運行 |
從新初始化數據驗證失敗的訂閱 |
檢測全部未經過數據驗證的訂閱並標記它們以進行從新初始化。 下次合併代理或分發代理運行時,訂閱服務器上將應用新快照。 |
無默認調度(默認狀況下未啓用)。 |
複製代理檢查 |
檢測未積極記錄歷史信息的複製代理。 若是做業步驟失敗,它將寫入 Microsoft Windows 事件日誌。 |
每十分鐘運行一次。 |
分發的複製監視刷新器 |
刷新複製監視器所使用的緩存的查詢。 |
連續運行。 |
如下爲代理詳細說明:
1. 代理歷史記錄清除:distribution , 默認爲每10分執行一次
USE distribution GO exec sp_MShistory_cleanup --會刪除與本地分發服務器的快照,日誌讀取器和分發代理的歷史行
從 MSmerge_history 中刪除了 0 條歷史記錄。
從 MSmerge_articlehistory 中刪除了 0 條歷史記錄。
從 MSsnapshot_history 中刪除了 0 條歷史記錄。
從 MSlogreader_history 中刪除了 0 條歷史記錄。
從 MSdistribution_history 中刪除了 0 條歷史記錄。
從 MSqreader_history 中刪除了 0 條歷史記錄。
從 MSrepl_errors 中刪除了 0 條歷史記錄。
從 sysreplicationalerts 中刪除了 0 條歷史記錄。
從 MStracer_tokens 中刪除了 0 條歷史記錄。
在 0.033 秒(0 行/秒)內刪除了 0 條複製歷史記錄。
從上面的消息能夠看到 sp_MShistory_cleanup 都作了什麼操做。
2. 分發清除: distribution , 默認爲每10分執行一次
EXEC dbo.sp_MSdistribution_cleanup --做業用於清除 distribution 庫中事務(已經/沒有同步到訂閱的事務,這取決於具體的參數),若是禁止該做業,那麼由log reader agent 傳遞到分發庫的數據就會越積越多。而 distribution agent 會掃描相應的表,將數據傳遞到訂閱庫。所以過多的數據會形成 distribution agent效率低下,一塊兒複製的延遲等…..而且也會引發 distribution 庫文件擴張 JOB默認第10分執行一次,調用 EXEC dbo.sp_MSdistribution_cleanup@min_distretention = 0, @max_distretention = 72 @min_distretention 表示當前事務被傳送到訂閱後,最小保留的時間,這裏是0小時,表示事務被傳遞到訂閱後會被馬上刪除。 @max_distretention 表示沒有被傳遞到訂閱的事務的最長時間。這裏是72小時,即若是一些事務在72小時後仍沒有被傳遞到訂閱,會被刪除掉,這會形成發佈庫和訂閱庫數據的不一致。 ------------------ sp_MSdistribution_cleanup 會去移除過時的訂閱並---刪除MSrepl_commands表和MSrepl_transactions表中的數據,並刪除相應的快照文件 cleanup會刪除48小時之前的歷史記錄。
3. 複製代理檢查
EXEC sp_replication_agent_checkup --檢查每一個分發數據庫的複製代理,這些代理正在運行但在指定檢測信號間隔內沒有歷史記錄。 此存儲過程在分發服務器的任何數據庫中執行
4. 過時的訂閱清除 --默認每10分執行一次
USE TEST GO EXEC sys.sp_expired_subscription_cleanup --檢查每一個發佈的全部訂閱的狀態並刪除過時的訂閱。 此存儲過程在發佈服務器的任何數據庫中執行,或在分發服務器的用於非Microsoft SQL Server 發佈服務器的分發數據庫中執行。
5. 從新初始化未經過數據驗證的訂閱 , 無執行計劃,須要時候能夠手工來啓動。
exec sys.sp_MSreinit_failed_subscriptions --從新初始化全部未經過數據驗證的訂閱。