Sql-Server

索引創建導致大量事務日誌增長

  • May 20, 2016

我有一個大約 10 億行的表。然後我創建一個索引如下:

CREATE NONCLUSTERED INDEX [IX_Index1] 
ON [dbo].[MyTable]( [CustomerID] ASC )  -- CustomerID is uniqueidentifier
WITH (DATA_COMPRESSION=PAGE);

這導致 9.15GB 索引(壓縮),但是在創建索引時事務日誌從空變為 158GB(沒有其他數據庫活動)。為什麼使用的日誌空間量遠高於生成的索引大小?

該數據庫是可用性組中處於完全恢復模式的 SQLServer 2014 Enterprise。

更新 我使用選項刪除並重新創建了索引SORT_IN_TEMPDB = ON。生成的事務日誌寫入對於 DB 的 tlog 為 10.4GB,對於 tempdb tlog 為 1.27GB。

在此處參考 MS 文件。還在SQLFool 上創建一個 60GB 的索引。

我認為正在發生的是,當使用 建構索引時SORT_IN_TEMDB=OFF,處理的整個索引建構都通過數據庫的事務日誌記錄(數據庫設置為完全恢復)。(此外,由於被索引的 GUID 列的分散特性,我預計會有大量的頁面拆分)

當使用 建構索引時SORT_IN_TEMPDB=ON,大部分事務日誌活動都將針對tempdb處於SIMPLE恢復模式的。

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