Я поддерживаю внутреннее приложение, которое хранит файлы на файловом ресурсе Windows Server 2003 SP2. Из-за того, как оно в настоящее время настроено для хранения файлов, в одной папке находится ~116 000 файлов (в другой — ~65 000, а в других папках — меньше, но все равно по несколько тысяч в каждой). Приложение стало очень медленно записывать файлы.
Расположение файлов можно настраивать до определенного предела, поэтому я пытаюсь придумать лучший план. Есть ли у кого-нибудь опыт, сколько элементов в папке может обработать SMB, прежде чем он станет непригодным для использования? В этом случае он был медленным довольно долгое время, но он не стал непригодным, пока папка не превысила 100 000 файлов.
решение1
Это больше зависит от пропускной способности и задержки (особенно задержки), чем от количества файлов и масштабирования алгоритмов, используемых для перечисления каталога. Нет никакого "волшебного числа", я полагаю, вот что я имею в виду.
Протокол SMB - этоотвратительныйдля требующих много-много круговых поездок. Это количество файлов, с удвоенной задержкой, будетмногораз более чем в два раза медленнее, например.
Вы случайно провели бенчмаркинг для вашей локальной сети, задержки вашей сетевой инфраструктуры и задержки подсистемы ввода-вывода вашего серверного компьютера. Вы, очевидно, нашли "магическое число". Я бы сократил этот каталог, пока производительность не улучшится. Другого пути нет!
решение2
Эван прав, магического числа нет. Это зависит от приложения и сервера. Обновление до Server 2008 поможет, и это первое, что я бы сделал, если клиент Vista или лучше, так как он использует SMBv2. У меня есть общие папки с 500 000 файлов, которые просматриваются как дерьмо, но, поскольку пользователи используют только прямые пути, они работают нормально. На том же сервере у меня есть общие папки с 100 000 файлов, с которыми у пользователей нет проблем.
решение3
Частично связано:
Остановить «последнее обновление доступа»
Всякий раз, когда вы получаете доступ к папке на диске NTFS, Windows XP обновляет эту папку и все подпапки отметкой времени с датой последнего доступа. Иногда это может замедлить производительность Windows.
Чтобы изменить это, откройте REGEDIT (Пуск -> Выполнить -> 'regedit') и перейдите в HKEY_LOCAL_MACHINES\System\CurrentControlSet\Control\FileSystem.
Создайте новый параметр DWORD (щелкните правой кнопкой мыши -> Создать -> Параметр DDWORD) с именем «NtfsDisableLastAccessUpdate» и установите значение «1».
и
Отключить ненужные соглашения об именовании
Для каждого созданного файла Windows XP использует одно дополнительное имя для совместимости с MSDOS: 8-символьное имя, за которым следует «.», затем 3 символа расширения. Если вы не собираетесь использовать только программное обеспечение DOS, это пустая трата памяти.
Чтобы изменить это, откройте REGEDIT.
Перейдите в раздел HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem.Измените значение ключа NtfsDisable8dot3NameCreation на «1».
( взято изhttp://basiccoms.blogspot.com/2008/08/windows-xp-performance-tweaking-guide.html)