Sql-Server
線上重建佔用大量日誌空間
為什麼線上重建一個主鍵聚集索引在佔用幾乎等於未觸及的非聚集索引大小的空間。
細節:
- 我們有一個索引大小為 7GB 的主鍵聚集索引(bigint 類型)的表。
- 我們在同一個表(varchar(36) 類型)上有另一個非聚集過濾索引,索引大小接近 1.5TB。
- 主鍵聚集索引的線上重建消耗了將近 1.6TB 的事務日誌大小。用於重建的選項 - (DATA_COMPRESSION = PAGE, ONLINE = ON, SORT_IN_TEMPDB = ON)
- 另一個觀察結果是,之前的索引是在沒有壓縮的情況下創建的,不確定這是否是導致如此巨大增長的原因。
- 有人可以透露一些內部資訊嗎?
聚集索引就是表。它包括所有列。聚集索引(基本上)不可能小於任何一個非聚集索引。當您讀取 7GB 大小時,您可能只查看了聚集鍵列大小或僅查看非葉級別。
因此,如果您重建聚集索引,那麼您將重建所有列 - 包括壓縮設置。最後重建聚集索引將數據複製到新位置,完成後,它會從舊位置刪除數據。
如果您在 2017 年,您可以進行可恢復索引重建,這允許您暫停重建,清空日誌,然後再次恢復重建。