Sql-Server
如何處理對日誌傳送影響最小的大表?
在需要清除或刪除的日誌傳送數據庫中有兩個半大型相關表(284,6876,609 行 - 156,785,176 KB 和 4,2628,162 行 - 2,212,464 KB)。如何處理這兩個表,同時盡量減少對日誌傳送的影響?
如果您
DROP
使用表,它將導致生成最少的日誌,因為它不會立即強制在已用空間上進行垃圾收集,它只是基本上只是刪除了引用。您同樣可以完成相同的結果TRUNCATE
(儘管我認為在大型表上可能會有更多的成本DROP
,但我必須對此進行研究並相應地更新我的答案)。這是一篇非常好的文章,詳細說明了為什麼操作
TRUNCATE
和DROP
操作都非常快速並生成最少的日誌,這是由於 SQL Server 的一個稱為deferred drop的特性。無論哪種方式,請避免
DELETE
否則會生成大量日誌,這些日誌需要在目標數據庫中發送和重新應用。這個StackOverflow 問題有多個答案,其中包含有關從大表中有效刪除數據的良好資訊(有些可能與您的問題沒有具體關係,但對將來的參考或其他有類似問題的使用者很有用)。