Snapshot agent負責收集publication database的資訊,將article的內容儲存在snapshot檔案中。而distribuiton cleanup job(後文簡稱清除作業)則負責刪除這些檔案。清除作業預設每15分鐘執行一次,但並不是每一次都會去刪除這些檔案。那麼其中有什麼規律嗎?
實際上這取決與您的設定。如果您的publication啟用了immeidate_sync,那麼清除作業會一直保留這些檔案,直到達到了 max distribution retention(這個值可以透過執行sp_Helpdistributor檢視到)。如果沒有啟用immediate_sync,那麼distribuiton agent將snapshot應用到訂閱資料庫之後,這些檔案就可以被刪除了。
您可能會好奇為什麼會有這樣的設定:
當immediate_sync為false是,理論上來說,只要msrepl_transactoins和msrepl_commands中的資料已經被同步到了訂閱,那麼這些資料是可以被立即刪除的。那就是說,我們無法透過當前的snapshot和msrepl_transactions/msrepl_commands中的資料來還原(初始化)一個的subscriptoin database,所以也就沒有必要保留這些檔案了。
如果immediate_sync為true,那麼只有當到達了max distribution retention, msrepl_transactoins和msrepl_commands中的資料才會被刪除。在這之前,SQL Server可以透過snapshot+msrepl_transactions/msrepl_commands來初始化一個訂閱資料庫的。所以這些檔案也就不會被提前刪除了。
實際上這個設定也影響到了重新初始化操作(reinitializtion), 當immedate_sync為false是,您必須使用一個新的快照;反之您可以選擇使用現存的快照檔案。
下面是一個重新初始化的截圖(immediate_sync為false),您可以看到“Use the current snapshot”的按鈕是禁用的。
注意:
在有些情況下,由於metadata不完整,清除作業無法查詢到snapshot檔案,也無法將其刪除。您手動地將這些檔案刪除即可。