Share via


進階重複資料刪除設定

適用於:Windows Server 2022、Windows Server 2019、Windows Server 2016、Azure Stack HCI 21H2 和 20H2 版本

本文件說明如何修改進階重複資料刪除設定。 針對建議的工作負載,預設設定應已足夠。 修改這些設定的主要原因,是為了改進重複資料刪除搭配其他工作負載類型時的效能。

修改重複資料刪除工作排程

預設重複資料刪除工作排程是專為搭配建議的工作負載運作並盡可能不干擾工作而設計 (不包括為備份使用類型啟用的「優先順序最佳化」工作)。 當工作負載有大型資源需求時,它可以確保工作僅在閒置時間執行,或是減少或增加允許重複資料刪除工作使用的系統資源量。

變更重複資料刪除排程

重複資料刪除工作是透過 Windows 工作排程器排程,並且可以在 Microsoft\Windows\Deduplication 路徑下檢視及編輯。 重複資料刪除包括數個可讓您輕鬆排程的 Cmdlet。

變更重複資料刪除工作執行時間最常見的原因,是為了確保工作在非尖峰時間執行。 以下的逐步範例示範如何針對「陽光普照的一天」案例修改重複資料刪除排程:有一部超交集 Hyper-V 主機會在週末以及工作日下午 7:00 之後閒置。 為了變更排程,請使用系統管理員身分執行下列 PowerShell Cmdlet。

  1. 停用排定的每小時最佳化工作。

     Set-DedupSchedule -Name BackgroundOptimization -Enabled $false
     Set-DedupSchedule -Name PriorityOptimization -Enabled $false
    
  2. 移除目前排定的記憶體回收完整性清除工作。

     Get-DedupSchedule -Type GarbageCollection | ForEach-Object { Remove-DedupSchedule -InputObject $_ }
     Get-DedupSchedule -Type Scrubbing | ForEach-Object { Remove-DedupSchedule -InputObject $_ }
    
  3. 建立夜間最佳化工作,它會在下午 7:00 執行,具有高優先順序,並使用系統上所有可用的 CPU 和記憶體。

     New-DedupSchedule -Name "NightlyOptimization" -Type Optimization -DurationHours 11 -Memory 100 -Cores 100 -Priority High -Days @(1,2,3,4,5) -Start (Get-Date "2016-08-08 19:00:00")
    

    注意

    -Start 提供之 System.Datetime 中的「日期」部分是無關的 (只要是過去的日期即可),但「時間」部分會指定工作應該開始的時間。

  4. 建立每週的記憶體回收工作,它會在星期六上午 7:00 執行,具有高優先順序,並使用系統上所有可用的 CPU 和記憶體。

     New-DedupSchedule -Name "WeeklyGarbageCollection" -Type GarbageCollection -DurationHours 23 -Memory 100 -Cores 100 -Priority High -Days @(6) -Start (Get-Date "2016-08-13 07:00:00")
    
  5. 建立每週的完整性清除工作,它會在星期日上午 7 時執行,具有高優先順序,並使用系統上所有可用的 CPU 和記憶體。

     New-DedupSchedule -Name "WeeklyIntegrityScrubbing" -Type Scrubbing -DurationHours 23 -Memory 100 -Cores 100 -Priority High -Days @(0) -Start (Get-Date "2016-08-14 07:00:00")
    

可用的全工作設定

您可以針對新的或是排定的重複資料刪除工作切換下列設定:

參數名稱 定義 接受的值 為何要設定此值?
類型 應排定的工作類型
  • 最佳化
  • GarbageCollection
  • Scrubbing
此值為必要,因為它是您要排定的工作類型。 在工作排定之後,您就無法變更這個值。
優先順序 已排定工作的系統優先順序
  • 一般
這個值有助於系統判斷如何配置 CPU 時間。 High 將使用較多的 CPU 時間,Low 則會使用較少的 CPU 時間。
排定執行工作的日子 0-6 的整數陣列,代表星期幾:
  • 0 = 星期日
  • 1 = 星期一
  • 2 = 星期二
  • 3 = 星期三
  • 4 = 星期四
  • 5 = 星期五
  • 6 = 星期六
排定的工作必須至少在其中一天執行。
核心 工作應使用系統上之核心的百分比 整數 0-100 (表示百分比) 控制工作將對系統上的計算資源產生的影響程度
DurationHours 允許工作執行的時數上限 正整數 避免工作和工作負載的非閒置時間強碰
已啟用 是否將執行工作 True/false 停用工作而不移除工作
完整 用於排程完整記憶體回收工作 參數 (true/false) 根據預設,每第四個工作為完整記憶體回收工作。 使用此參數,您就可以排程完整記憶體回收以更頻繁地執行。
InputOutputThrottle 指定套用至工作的輸出/輸入量節流設定 整數 0-100 (表示百分比) 節流設定可確保工作不會干擾其他進行大量 I/O 的程序。
記憶體 系統上工作應使用之記憶體的百分比 整數 0-100 (表示百分比) 控制工作將對系統上的記憶體資源產生的影響程度
名稱 已排程工作的名稱 String 工作必須有可唯一識別的名稱。
ReadOnly 指示清除工作程序,並報告它所發現的損毀,但不執行任何修復動作 參數 (true/false) 您可以手動還原位於磁碟損壞區段的檔案。
開始 指定工作應該開始的時間 System.DateTime Start 提供之 System.Datetime 中的「日期」部分是無關的 (只要是過去的日期即可),但「時間」部分會指定工作應該開始的時間。
StopWhenSystemBusy 指定重複資料刪除是否應該在系統忙碌時停止 參數 (true/false) 這個參數可讓您控制重複資料刪除的行為--如果您想要在工作負載並非閒置時執行重複資料刪除,這特別重要。

修改重複資料刪除全磁碟區設定

切換磁碟區設定

您可以透過在啟用磁碟區重複資料刪除時所選取的使用類型,來設定全磁碟區預設設定。 重複資料刪除包括可輕鬆編輯全磁碟區設定的 Cmdlet:

從所選使用類型修改磁碟區設定的主要原因,是為了改進特定檔案 (例如多媒體或其他已壓縮的檔案類型) 的讀取效能,或微調重複資料刪除以針對您的特定工作負載達到更好的最佳化。 下列範例示範如何針對最類似於一般用途檔案伺服器工作負載,但使用經常變更之大型檔案的工作負載,修改重複資料刪除磁碟區設定。

  1. 查看叢集共用磁碟區 1 的目前磁碟區設定。

     Get-DedupVolume -Volume C:\ClusterStorage\Volume1 | Select *
    
  2. 啟用叢集共用磁碟區 1 上的 OptimizePartialFiles,讓 MinimumFileAge 原則套用至檔案的區段,而非整個檔案。 這樣可確保即使檔案的區段經常變更,檔案的大部分仍可獲得最佳化。

     Set-DedupVolume -Volume C:\ClusterStorage\Volume1 -OptimizePartialFiles
    

可用的全磁碟區設定

設定名稱 定義 接受的值 為何要修改此值?
ChunkRedundancyThreshold 區塊在複製到區塊存放區的熱點區段之前,區塊被參考的次數。 熱點區段的值是所謂的「熱門」區塊,經常會被參考,並有多個存取路徑以改善存取時間。 正整數 修改此數字的主要原因是為了增加具有高度重複資料磁碟區的儲存速率。 一般情況下,建議的設定為預設值 (100),且您應該不需要修改這個值。
ExcludeFileType 要在最佳化時排除的檔案類型 副檔名的陣列 某些檔案類型,特別是多媒體或是已壓縮的檔案,最佳化之後並不會有太多好處。 此設定可讓您設定要排除的類型。
ExcludeFolder 指定不應考量進行最佳化的資料夾路徑 資料夾路徑的陣列 如果您想要改善效能,或是不要讓特定路徑中的內容被最佳化,您可以將磁碟區上的特定路徑排除在最佳化的考量之外。
InputOutputScale 指定後續處理工作期間重複資料刪除要在磁碟區上使用的 IO 平行處理層級 (IO 佇列) 正整數,範圍 1-36 修改此值的主要原因是藉由限制允許重複資料刪除在磁碟區上使用的 IO 佇列數目,減少對高 IO 工作負載的效能影響。 請注意,修改此設定的預設值,可能會導致重複資料刪除的後續處理工作執行速度變慢。
MinimumFileAgeDays 檔案建立之後,在被視為需要依原則進行最佳化之前的天數。 正整數 (包括零) 預設HyperV 使用類型會將此值設定為 3,來將熱門或最近所建立檔案的效能最佳化。 如果您想要更積極進行重複資料刪除,或如果您不在意因為重複資料刪除而產生相關聯的額外延遲,您可以修改此值。
MinimumFileSize 檔案在被視為需要依原則進行最佳化時的最小檔案大小 大於 32 KB的正整數 (位元組) 變更此值的主要原因是為了排除最佳化價值有限的小型檔案,以節省運算時間。
NoCompress 區塊是否應在放入區塊存放區之前壓縮 True/False 某些類型的檔案 (特別是多媒體檔案和已壓縮的檔案類型) 可能無法妥善壓縮。 此設定可讓您針對磁碟區上的所有檔案關閉壓縮。 如果您正在最佳化的資料集包含許多已壓縮的檔案,這會是理想的設定。
NoCompressionFileType 區塊進入區塊存放區之前,其區塊不應被壓縮的檔案類型 副檔名的陣列 某些類型的檔案 (特別是多媒體檔案和已壓縮的檔案類型) 可能無法妥善壓縮。 此設定可針對那些檔案關閉壓縮,以節省 CPU 資源。
OptimizeInUseFiles 啟用時,具有作用中控制代碼的檔案本身會被視為需要依原則進行最佳化。 True/false 如果您的工作負載持續開啟檔案很長的時間,請啟用此設定。 如果設定沒有啟用,則如果工作負載開啟對檔案的控制代碼,檔案將永遠不會進行最佳化,即使它僅是偶爾在結尾附加資料也一樣。
OptimizePartialFiles 啟用時,MinimumFileAge 值會套用至檔案的區段,而非整個檔案。 True/false 如果您的工作負載會使用大型、經常編輯的檔案,而其中大部分的檔案內容不會更動,請啟用此設定。 如果未啟用此設定,即使大部分的檔案內容已準備好最佳化,這些檔案也將永遠不會進行最佳化,因為它們持續在變更。
Verify 啟用時,如果區塊的雜湊和我們在區塊存放區中已經擁有的區塊相符,就會逐個位元組比較該區塊以確保它們完全相同。 True/false 這是一項完整性功能,可確保比較區塊的雜湊演算法在比較實際上不同但擁有相同雜湊的兩個資料區塊時,不會發生錯誤。 實際上,這幾乎不太可能發生。 啟用驗證功能會對最佳化工作增加相當大的負擔。

修改重複資料刪除全系統設定

重複資料刪除有其他的全系統設定,可透過登錄編輯程式來設定。 這些設定會套用到在系統上執行的所有工作和磁碟區。 編輯登錄時,請務必非常小心。

例如,您可能想要停用完整記憶體回收。 如需關於這為何可能對您的案例有用的詳細資訊,請參閱常見問題集。 若要使用 PowerShell 編輯登錄:

  • 如果重複資料刪除正在叢集中執行:

      Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\ddpsvc\Settings -Name DeepGCInterval -Type DWord -Value 0xFFFFFFFF
      Set-ItemProperty -Path HKLM:\CLUSTER\Dedup -Name DeepGCInterval -Type DWord -Value 0xFFFFFFFF
    
  • 如果重複資料刪除未在叢集中執行:

      Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\ddpsvc\Settings -Name DeepGCInterval -Type DWord -Value 0xFFFFFFFF
    

可用的全系統設定

設定名稱 定義 接受的值 為什麼要變更此值?
WlmMemoryOverPercentThreshold 此設定可允許工作使用比重複資料刪除判斷的實際可用記憶體量更多的記憶體。 例如,設定為 300 表示工作使用的記憶體量必須達到所指派記憶體的三倍,才會取消工作。 正整數 (300 的值表示 300% 或 3 倍) 如果您有另一項工作會在重複資料刪除使用更多記憶體時停止
DeepGCInterval 此設定可設定一般記憶體回收工作變成完整記憶體回收工作的間隔。 設定為 n 代表每第 n 次工作將會是完整記憶體回收工作。 請注意,針對具有備份使用類型之磁碟區,一律會停用完整垃圾收集 (不論登錄值為何)。 如果備份磁碟區需要完整記憶體回收,可以使用 Start-DedupJob -Type GarbageCollection -Full 整數 (-1 表示已停用) 請參閱此常見問題集

常見問題集

我變更了重複資料刪除設定,而且現在工作速度變慢或無法完成,或我的工作負載效能降低。為什麼?這些設定提供您許多強大的功能來控制重複資料刪除的執行方式。 請謹慎使用這些設定,並監視效能

我想要立即執行重複資料刪除工作,但不想建立新的排程--可以這樣做嗎?可以,所有的工作均可手動執行

完整和一般記憶體回收之間有什麼不同?記憶體回收有兩種類型:

  • 「一般記憶體回收」會使用統計演算法來尋找符合特定條件 (記憶體與 IOPS 不足) 的大型未被參考區塊。 一般記憶體回收只有在未被參考區塊的百分比達到下限時,才會壓縮區塊存放區容器。 相較於完整記憶體回收,此類型記憶體回收的執行速度更快且使用的資源較少。 一般記憶體回收工作的預設排程是一星期執行一次。
  • 「完整記憶體回收」會執行更完整的工作,以尋找未參考區塊並釋放更多磁碟空間。 完整記憶體回收會壓縮每一個容器,即使容器內只有單一區塊未被參考。 如果在最佳化工作期間曾發生當機或電源中斷,完整記憶體回收也會釋放曾經使用的空間。 完整記憶體回收工作將會 100% 復原重複資料刪除磁碟區上可復原的可用空間,代價則是需要比執行一般記憶體回收工作時更多的時間與系統資源。 與一般記體回收工作相比,完整記憶體回收工作通常會尋找並釋放最多多 5% 的額外未被參考資料。 完整記憶體回收工作的預設排程是在每排程四次記憶體回收時執行。

為什麼要停用完整記憶體回收?

  • 記憶體回收可能會對磁碟區的存留期陰影複製和增量備份大小產生負面影響。 執行完整記憶體回收工作時,可能會看到高區塊或 I/O 密集性工作負載的效能降低。
  • 如果您知道系統當機,您可以從 PowerShell 手動執行完整記憶體回收工作來清除流失的部分。