Sql-Server
IndexOptimize 成功,但是 sys.dm_db_index_physical_stats 仍然顯示巨大的碎片
我正在做一個需要縮小數據庫的項目。在縮小之後,我檢查
sys.dm_db_index_physical_stats
並可以看到我的很多索引都超過 99% 是碎片化的 (avg_fragmentation_in_percent
)。對此,我
IndexOptimize
由 Ola Hallengren 執行,程式碼如下:EXECUTE [dbo].[IndexOptimize] @Databases = 'Dynamic.Migrate', @FragmentationLow = 'INDEX_REORGANIZE', @FragmentationMedium = 'INDEX_REBUILD_OFFLINE', @FragmentationHigh = 'INDEX_REBUILD_OFFLINE', @FillFactor = '80', @UpdateStatistics = 'ALL', @StatisticsSample = '100', @LogToTable = 'Y'
這成功完成,但是當我
sys.dm_db_index_physical_stats
再次檢查時,avg_fragmentation_in_percent
值沒有改變,並且狀態我的索引仍然碎片化超過 99%。我在這裡錯過了什麼嗎?
這是來自 Ola Hallengren 的SQL Server 索引和統計維護文件:
最小頁數
設置大小,以頁為單位;跳過頁數較少的索引進行索引維護。預設值為 1000 頁。這是基於 Microsoft 的建議。
IndexOptimize 檢查 sys.dm_db_index_physical_stats 中的 page_count 以確定索引的大小。
因此,您提到的索引在執行後仍然是碎片化
IndexOptimize
的,因為您沒有在程式碼中更改該值,因此很可能會因為頁面少於 1000 頁的最小值而被跳過。