Общая задача при настройке реплики DFS - определить размер 32-самых больших файлов в реплицированной папке - сумма этих данных должна быть равна минимальный размер промежуточной зоны, согласно действующей передовой практике.Лучший способ вычисления размеров файлов верхнего уровня для размера размещения папки DFS
Метод обнаружения и расчета этого топ-32 размер файла приведен в Technet блоге: https://blogs.technet.microsoft.com/askds/2011/07/13/how-to-determine-the-minimum-staging-area-dfsr-needs-for-a-replicated-folder/
Он основан на использовании Get-ChildItem
, чтобы найти все файлы и их размеры в пути, сортировать по размеру, отбросить все но 32 крупнейших, а затем вычислить сумму.
Это нормально, когда у вас ограниченное количество файлов на вашем пути, но есть серьезные недостатки при индексировании папки сотен тысяч, если не миллионов файлов. Процесс сбрасывает все в память во время его выполнения - в моем примере он потребляет более 2 ГБ виртуальной памяти - и занимает много времени, даже когда отдельные файлы довольно малы. Память остается выделенной до тех пор, пока экземпляр PS не будет закрыт.
PS C:\> measure-command { (get-childitem F:\Folder\with\966693\items -recurse |
sort-object length -descending | select-object -first 32 |
measure-object -property length -sum).sum }
Days : 0
Hours : 0
Minutes : 6
Seconds : 6
Milliseconds : 641
Ticks : 3666410633
TotalDays : 0.00424353082523148
TotalHours : 0.101844739805556
TotalMinutes : 6.11068438833333
TotalSeconds : 366.6410633
TotalMilliseconds : 366641.0633
Спасибо, что выглядит еще эффективнее, сбрасывая ненужные результаты. Что касается моих результатов, они были довольно последовательны при тестировании с файлами 100K + в деревьях папок. Я хотел исправить эту проблему, потому что в основном я получал утечку памяти на сервере каждый раз, когда я пробовал исходный процесс на 1,2 млн. Наборов файлов элементов. Особенностью этих конкретных наборов файлов является то, что большая часть из них состоит из файлов размером <5 КБ. – Trix