Sql-Server

IndexOptimize 成功,但是 sys.dm_db_index_physical_stats 仍然顯示巨大的碎片

  • November 28, 2019

我正在做一個需要縮小數據庫的項目。在縮小之後,我檢查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 頁的最小值而被跳過。

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