Sql-Server

FillFactor:Ola Hallengren 的 IndexOptimize 腳本

  • August 1, 2021

我們正在使用 Ola Hallengren 的 IndexOptimize 腳本在 SQL Server 2008 和 2012 上重建索引。這些維護腳本非常好,並且已經為我們的數據庫工作了幾個月。但是,最近我注意到它在數據庫上執行索引重建後將 FillFactor 更改為 90,即使 FillFactor 參數為NULL.

在執行腳本之前,我檢查sys.indexes了所有索引的 FillFactor 是否為 0,但我不確定為什麼腳本在完成後將 FillFactor 更改為 90。這在數據庫上引起了很多問題。

您知道這是否是 IndexOptimize 腳本中 FillFactor 更改為 90 的預期行為?

這是我執行的:

EXECUTE dbo.IndexOptimize
@Databases = 'dbname',
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@LogToTable = 'Y'

如果您為變數賦值,Ola 的腳本只會更改填充因子@FillFactor

IF @FillFactor IS NOT NULL AND @CurrentIsPartition = 0 AND @CurrentIndexType IN(1,2,3,4) SET @CurrentCommand13 = @CurrentCommand13 + ', FILLFACTOR = ' + CAST(@FillFactor AS nvarchar)

這意味著某人:

  1. 修改儲存過程以使用 90 作為預設值;
  2. 從維護中帶外執行它;要麼
  3. 使用不同的腳本或 GUI 更改了值。

您可以編寫儲存過程的腳本以查看是否有人更改了預設值,

堅果

或者,您可以查詢dbo.CommandLog表以查看是否在REBUILD填充因子為 90 的情況下執行命令。

SELECT *
FROM dbo.CommandLog AS cl
WHERE cl.CommandType = 'ALTER_INDEX'
AND cl.Command LIKE '%FILLFACTOR%'

如果有人通過使用不同的腳本或 GUI 對其進行了更改,那將更難追踪。

就我而言,在 SSMS 伺服器報告“架構更改歷史記錄”中,我看到該表在夜間被刪除並重新創建。我追踪了工作,然後是程序。果然,該表每晚都在重建,而沒有指定 FILLFACTOR(因此使用伺服器預設值)。

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