高度なデータ重複除去の設定

適用対象: Windows Server 2022、Windows Server 2019、Windows Server 2016、Azure Stack HCI バージョン 21H2 および 20H2

このドキュメントでは、高度なデータ重複除去の設定を変更する方法について説明します。 推奨されるワークロードについては、既定の設定で十分です。 これらの設定を変更する主な理由は、その他の種類のワークロードでのデータ重複除去のパフォーマンス向上です。

データ重複除去ジョブ スケジュールの変更

既定のデータ重複除去ジョブ スケジュールは、(バックアップ使用法の種類に対して有効な優先順位最適化ジョブを除いて) 推奨されるワークロードで適切に動作し、可能な限り悪影響を及ぼさないように設計されています。 ワークロードには、サイズの大きいリソース要件がある場合、ジョブがアイドル状態の時間内にのみ実行されるようにしたり、データ重複除去ジョブが使用できるシステム リソースの量を増減したりできます。

データ重複除去のスケジュールの変更

データ重複除去ジョブは、Windows タスク スケジューラを使用してスケジュールされ、パス Microsoft\Windows\Deduplication で表示および編集できます。 データ重複除去には、スケジュールを簡単にするいくつかのコマンドレットが含まれます。

データ重複除去ジョブを実行する時間を変更する最も一般的な理由は、ジョブが業務時間外に実行されるようにするためです。 次の手順の例は、週末と平日の午後 7:00 以降にアイドル状態となるハイパーコンバージド Hyper-V ホストの、"晴れた日" のシナリオでデータ重複除去スケジュールを変更する方法を示しています。 スケジュールを変更するには、管理者コンテキストで次の PowerShell コマンドレットを実行します。

  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. 高優先順位で、システム上のすべての CPU と使用可能なメモリを使用して午後 7時 00分に実行される、夜間の最適化ジョブを作成します。

     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. 高優先順位で、システム上のすべての CPU と使用可能なメモリを使用して土曜日の午前 7時 00分に実行される、週単位のガベージ コレクション ジョブを作成します。

     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. 高優先順位で、システム上のすべての CPU と使用可能なメモリを使用して日曜日の午前 7時 00分に実行される、週単位の整合性スクラブ ジョブを作成します。

     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")
    

使用可能なジョブ全体の設定

新規またはスケジュールされたデータ重複除去ジョブの、次の設定を切り替えることができます。

パラメーター名 定義 指定可能な値 この値を設定する理由
スケジュールする必要があるジョブの種類
  • 最適化
  • ガベージ コレクション
  • スクラブ
この値は、スケジュールされるジョブの種類であるため、必要です。 タスクをスケジュールした後は、この値を変更できません。
優先度 スケジュールされたジョブのシステム優先順位
  • 標準
この値は、CPU 時間が割り当てられる方法を決定するのに役立ちます。 [高] は多くの CPU 時間を使用し、[低] は使用する CPU 時間がそれより少なくなります。
日間 ジョブがスケジュールされる曜日 週の曜日を表す 0 ~ 6 の整数の配列。
  • 0 = 日曜日
  • 1 = 月曜日
  • 2 = 火曜日
  • 3 = 水曜日
  • 4 = 木曜日
  • 5 = 金曜日
  • 6 = 土曜日
スケジュールされたタスクは、少なくともいずれかの曜日に実行する必要があります。
コア ジョブが使用するシステム上のコアの割合 (パーセントを示す) 整数 0 ~ 100 ジョブがシステム上のコンピューティング リソースに与える影響のレベルを制御するため
DurationHours ジョブの実行が許容される最大時間数。 正の整数 ワークロードの非アイドル時間にジョブが実行されるのを阻止するため
Enabled ジョブが実行されるかどうか true または false ジョブを削除せずに無効にするため
[完全] フル ガベージ コレクション ジョブのスケジュール スイッチ (true または false) 既定では、4 番目のジョブはすべてガベージ コレクション ジョブです。 このスイッチを使用して、より頻繁に実行されるフル ガベージ コレクションをスケジュールできます。
InputOutputThrottle ジョブに適用される入力/出力の調整の量の指定 (パーセントを示す) 整数 0 ~ 100 調整により、ジョブが他の I/O 集中型のプロセスに干渉しなくなります。
メモリ ジョブが使用するシステム上のメモリの割合 (パーセントを示す) 整数 0 ~ 100 ジョブがシステム上のコンピューティング リソースに与える影響のレベルを制御するため
名前 スケジュールされたジョブの名前 String ジョブには一意に識別できる名前が必要であるため。
ReadOnly スクラブ ジョブが検出された破損を処理およびレポートしますが、修復アクションは実行しないことを示します。 スイッチ (true または false) ディスクの不適切なセクションに配置されているファイルを手動で復元する必要があります。
開始 ジョブを開始する時刻の指定 System.DateTime Start に提供される System.Datetime日付部分は (過去日付である限り) 使用されませんが、時間部分はジョブを開始する時間を指定します。
StopWhenSystemBusy システムがビジー状態の場合にデータ重複除去が実行を停止するかどうかの指定 スイッチ (true または false) このスイッチを使用して、データ重複除去の動作を制御することができます。これは、ワークロードがアイドル状態でない場合にデータ重複除去を実行する場合に特に重要です。

データ重複除去ボリューム全体の設定の変更

ボリュームの設定の切り替え

ボリュームに対して重複除去を有効にするときに選択する使用法の種類から、ボリューム全体についてのデータ重複除去の既定の設定を行うことができます。 データ重複除去には、ボリューム全体の設定を簡単に編集できるようにするコマンドレットが含まれています。

選択した使用法の種類からボリュームの設定を変更する主な理由は、特定のファイル (既に圧縮されているマルチメディアまたはほかのファイルの種類など) の読み込みのパフォーマンス向上、またはデータ重複除去の微調整による特定のワークロードの最適化です。 次の例は、汎用ファイル サーバーのワークロードに最も類似している一方で、頻繁に変更される大きなファイルを使用するワークロードのデータ重複除去設定を変更する方法を示します。

  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 ファイルが最適化のポリシー内であるとみなされる前にファイルが作成されてから経過した日数 正の整数 (0 を含む) DefaultHyper-V 使用法の種類はこの値を 3 に設定して、ホットまたは最近作成されたファイルのパフォーマンスを最大化します。 データ重複除去がより積極的に行われるようにする場合、または重複除去に関連してさらに待機時間が増えるのを避ける場合は、この値を変更しても構いません。
MinimumFileSize ファイルが最適化のポリシー内であるとみなされる必要がある最小ファイル サイズ 32 KB より大きい正の整数 (バイト) この値を変更する主な理由は、最適化の値が限られている可能性のある小さなファイルを除外することによって、コンピューティング時間を節約することです。
NoCompress チャンクがチャンク ストアに移される前に、チャンクを圧縮するかどうか True/False ある種のファイル、特にマルチ メディア ファイルと既に圧縮済みのファイルの種類は、適切に圧縮されない可能性があります。 この設定では、ボリューム上のすべてのファイルの圧縮をオフにすることができます。 既に圧縮されているファイルが多数含まれるデータセットを最適化しているのが理想です。
NoCompressionFileType チャンクがチャンク ストアに移される前に、チャンクを圧縮しないファイルの種類 ファイル拡張子の配列 ある種のファイル、特にマルチ メディア ファイルと既に圧縮済みのファイルの種類は、適切に圧縮されない可能性があります。 この設定では、そのようなファイルの圧縮をオフにして、CPU リソースを節約できます。
OptimizeInUseFiles 有効な場合は、最適化のためのポリシーとしてこれらに対してアクティブなハンドルを持つファイルと見なされます。 true または false ワークロードによってファイルが長期間開かれたままとなっている場合、この設定を有効にします。 この設定が有効でない場合、ワークロードに開いているハンドルがある場合は、このハンドルがまれにデータを最後に追加するだけであっても、ファイルが最適化されません。
OptimizePartialFiles 有効にすると、ファイル全体ではなく、ファイルのセグメントに MinimumFileAge 値が適用されます。 true または false ワークロードが大容量で頻繁に編集される、内容はほとんどがそのままのファイルを処理する場合は、この設定を有効にします。 この設定が有効でない場合、これらのファイルは常に変更され続けるため、ファイルの内容は最適化される準備ができているにもかかわらず、ファイルが最適化されません。
確認 有効にすると、チャンク ストア内に既にあるチャンクがチャンクのハッシュに一致する場合、これらのチャンクが等しいことが、バイトで確認されます。 true または false これは、実際には同一ではないもののハッシュ値が同じである 2 つのデータのチャンクを比較することによって、チャンクを比較するハッシュ アルゴリズムが誤りを起こさないようにする整合性機能です。 実際には、このようなことが起きる可能性は極めて低くなります。 検証機能を有効にすると、最適化ジョブに大きなオーバーヘッドが追加されます。

データ重複除去システム全体の設定の変更

データ重複除去には、レジストリから構成できる追加のシステム全体の設定があります。 これらの設定は、システム上で実行されるすべてのジョブとボリュームに適用されます。 レジストリを編集するときは、細心の注意を払ってください。

たとえば、フル ガベージ コレクションを無効にするとします。 これがお使いのシナリオに役立つ理由の詳細は、「よく寄せられる質問」に記載されています。 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 の場合、ジョブがキャンセルされるには、ジョブは割り当てられたメモリの 3 倍のメモリを使用する必要があることを意味します。 正の整数 (300 の値は 300% または 3 倍を意味します) データ重複除去でより多くのメモリが使用されると停止する別のタスクがある場合
DeepGCInterval この設定により、通常のガベージ コレクション ジョブが完全なガベージ コレクション ジョブになる間隔が構成されます。 設定が n の場合、n ごとにジョブがフル ガベージ コレクション ジョブになります。 バックアップ使用法の種類を含むボリュームでは、常にフル ガベージ コレクションが無効になる (レジストリ値に関係なく) 点に注意してください。 Start-DedupJob -Type GarbageCollection -Full は、バックアップ ボリュームにフル ガベージ コレクションが必要な場合に使うことができます。 整数 (-1 は無効を示します) このよく寄せられる質問を参照してください。

よく寄せられる質問

データ重複除去設定を変更すると、ジョブの速度が低下するか、終了しないか、ワークロードのパフォーマンスが低下しました。なぜですか。 これらの設定により、データ重複除去の実行方法を制御するための強力な機能が提供されます。 設定は責任を持って使用し、パフォーマンスを監視してください。

データ重複除去ジョブを今すぐ実行したいのですが、新しいスケジュールを作成したくありません。これは可能ですか。 はい。すべてのジョブを手動で実行できます

フルと通常のガベージ コレクションの違いは何ですか。ガベージ コレクションには、次の 2 種類があります。

  • 通常のガベージ コレクションは統計アルゴリズムを使用して、特定の基準 (メモリと IOPS が少ない) に適合する大きな参照されていないチャンクを検索します。 通常のガベージ コレクションでは、チャンクの最小の割合が参照されていない場合にのみ、チャンク格納コンテナーが圧縮されます。 この種類のガベージ コレクションは、フル ガベージ コレクションより実行が速く、使用されるリソースはより少なくなります。 通常のガベージ コレクション ジョブの既定のスケジュールでは、実行は毎週 1 回です。
  • フル ガベージ コレクションは、参照されていないチャンクをより綿密に検索し、より多くのディスク領域を解放します。 フル ガベージ コレクションでは、コンテナー内の単一のチャンクだけが参照されていない場合でも、すべてのコンテナーが圧縮されます。 フル ガベージ コレクションでは、最適化ジョブ中にクラッシュや電源障害があった場合に使用されていた可能性のある領域も解放されます。 フル ガベージ コレクション ジョブは、通常のガベージ コレクションジョブと比較してより多くの時間とシステム リソースを費やして、重複解除されたボリューム上で回復できる利用可能な領域を 100% 回復します。 フル ガベージ コレクション ジョブは一般的に、通常のガベージ コレクション ジョブより最大 5% 多くの参照されていないデータを検出して解放します。 既定のスケジュールでは、フル ガベージ コレクション ジョブは通常のガベージ コレクションのスケジュールの 4 回目ごとに実行されます。

フル ガベージ コレクションを無効にする場合の利点は何ですか。

  • ガベージ コレクションは、ボリュームの有効期間のシャドウ コピーと増分バックアップのサイズに悪影響を与える可能性があります。 頻繁に変化する、または I/O 集中型のワークロードは、フル ガベージ コレクション ジョブによってパフォーマンスが低下する可能性があります。
  • システムがクラッシュしたことがわかっている場合は、PowerShell からフル ガベージ コレクション ジョブを手動で実行して、リークをクリーンアップすることができます。