Sql-Server
索引創建導致大量事務日誌增長
我有一個大約 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
恢復模式的。