Sql-Server

刪除過程中極度膨脹的事務日誌

  • November 28, 2020

現在,我知道在大刪除期間日誌會變大,應該嘗試將其分成批次。但我覺得這種情況很奇怪,如果有人可以向我解釋,那就太好了!

我有一個 27GB 的數據庫和大約 30GB 的日誌。正在刪除的表大小約為 15GB,其中包含 2000 萬條記錄。該表有 20 列,只有 bigint 和 int 數據類型。

刪除操作正在從相關表中刪除 1800 萬條重複記錄。我已經切換選擇刪除以確保記錄計數匹配並且確實如此。

在我用完磁碟空間並被迫回滾之前,日誌增長到大約 110GB。

表上沒有觸發器,但有 16 個非聚集索引,沒有聚集索引。如果我在執行操作之前禁用所有索引,它將完成而不會從原始大小增加日誌。

所以我的問題是,從表中刪除時,我是否記錄了每個索引的每次刪除?如果是這樣,這是正常行為還是可能是因為缺少聚集索引?

所以我的問題是,從表中刪除時,我是否記錄了每個索引的每次刪除?

你當然是。該日誌包含對每個頁面的每次更改的記錄,其中包含足以重做或撤消更改的詳細資訊。

如果是這樣,這是正常行為還是可能是因為缺少聚集索引?

無關。您將從17 個單獨的“索引”、16 個非聚集索引和一個堆中的每一個中刪除 1800 萬行。

並且禁用/重建非聚集索引比刪除/創建它們更安全,因為索引定義保留在伺服器上。

是的,索引修改的記錄方式與“數據”修改幾乎相同。

引用自:https://dba.stackexchange.com/questions/280433