Файловые таблицы SQL Server FILESTREAM с миллионами файлов

Я просто хотел спросить, безопасно ли создавать таблицу файлов, которая в будущем будет содержать около 5-15 миллионов файлов размером не более 0,5-10 МБ?

Справится ли с этим NTFS?

Однажды у меня была проблема на старой Windows Server 2008 R2: когда у меня была папка с более чем 2,5 миллионами файлов, создание нового файла внутри этой папки занимало около 30 секунд... получение списка файлов занимало около 5 минут. Это проблема NTFS?

Может ли это быть проблемой для этого? Или таблицы файловых потоков/файлов сами будут создавать подпапки для обработки такого количества файлов и т. д.?

Или достаточно отключить соглашение об именах 8.3, и тогда оно будет работать нормально?

Спасибо и привет


person d00lar    schedule 29.01.2020    source источник
comment
Не могли бы вы указать % файлов размером более 1 МБ?   -  person gotqn    schedule 29.01.2020
comment
›50% почему вы спрашиваете? это имеет значение?   -  person d00lar    schedule 29.01.2020
comment
stackoverflow.com/a/20592796/1080354 - потому что вы можете получить какое-то гибридное решение - хранение небольших файлов в базе данных и большие на файловом потоке или если все они маленькие, то хранить их в базе данных   -  person gotqn    schedule 29.01.2020
comment
хорошо, спасибо, но предположим, что я хочу использовать только этот файловый поток / файловые таблицы - справится ли он с ситуацией, на которую я указываю?   -  person d00lar    schedule 29.01.2020
comment
Не могли бы вы протестировать в аналогичной среде - вы можете сгенерировать 5 миллионов фиктивных записей и протестировать их самостоятельно? Это самый верный способ.   -  person gotqn    schedule 29.01.2020
comment
конечно, я могу, но я думаю, что у всех была такая ситуация, когда что-то работало нормально на dev/dummy test и не работало на производстве? для чего существует этот веб-сайт, чтобы мы могли делиться опытом?   -  person d00lar    schedule 29.01.2020
comment
Ну, вот почему вы должны создавать свои среды с помощью сценариев, как для разработки, так и для производства. Чтобы вы знали, что используете ту же конфигурацию, прежде чем переходить от разработки к производству. Кроме того, есть некоторые советы от Microsoft о том, когда использовать FILESTREAM и для каких типов файлов.   -  person Radu Gheorghiu    schedule 29.01.2020
comment
я видел это, но это не проясняет мой вопрос - производительность выше, если файлы меньшего размера - хорошо, но может ли действительно большое количество файлов убить это? или количество файлов не имеет значения?   -  person d00lar    schedule 29.01.2020
comment
см. также. Время создания файла может увеличиться из-за фрагментации индексного файла каталога и регулярного обслуживания путем дефрагментации, что может быть хорошей идеей. Получение списков файлов часто задерживается из-за инструментов, сортирующих или иным образом подготавливающих списки для отображения, но это не отражает присущую самой NTFS проблему (такая функция, как FindFirstFile, должна выполнять перечисление немедленно, независимо от количества файлов). Обратите внимание, что тестирование никогда не бывает ошибочным — с версии 2008 R2 и по настоящее время NTFS, безусловно, также претерпела улучшения.   -  person Jeroen Mostert    schedule 29.01.2020
comment
См. также эту информацию о том, как хранятся FILESTREAM данные. - это не все в одном большом каталоге, поэтому, если вы заранее беспокоитесь о возможных проблемах с производительностью, имеет смысл построить свое решение так, чтобы оно, по крайней мере, было готово к распределению данных по каталогам с помощью нескольких таблиц. /columns (объединенные с представлением) или даже несколько файловых групп (вы не можете добавлять файлы в FILESTREAM FG, но вы можете иметь несколько FG, каждая со своим собственным корневым каталогом).   -  person Jeroen Mostert    schedule 29.01.2020
comment
так что сам по себе он не будет создавать никаких подкаталогов, но если я разделю это, скажем, на 10 басен с 1 миллионом файлов в каждой и каждой таблицей в отдельной файловой группе, поэтому отдельный каталог будет почти идеальным?   -  person d00lar    schedule 29.01.2020
comment
Если вы на самом деле еще не запускали тесты (более свежие, чем те, которые вы когда-то делали для старого сервера Windows 2008 R2, без, насколько я понимаю, SQL Server создает файлы и обращается к ним), я бы не стал делать никаких предположений о том, что такое настройка. практически идеально. Нет необходимости упреждающе усложнять вещи, чем это необходимо; достаточно не производить их, чтобы впоследствии изменение обошлось чрезвычайно дорого. Замена таблицы представлением обычно не представляет сложности; заменить представление другим представлением еще проще.   -  person Jeroen Mostert    schedule 29.01.2020


Ответы (2)


Справится ли с этим NTFS?

да. Просто не открывайте проводник. ТО - программа, а не операционная система - с этим тоже не справится. Командная строка или сервер, которые не пытаются загрузить все файлы в список, работают хорошо.

person TomTom    schedule 29.01.2020
comment
так что эта проблема, которая у меня была в 1-м посте, «затем создание нового файла внутри этой папки заняло около 30 секунд», не была связана с nfts? я создавал этот новый файл программно, не создавая каталог и т. д.? - person d00lar; 29.01.2020

По моему опыту, короче говоря, да, NTFS может справиться с этим, но избегайте изучения каталогов FILESTREAM (проводник не может обработать такой объем файлов, он рухнет). В некоторых технических документах рекомендуется использовать FileStream, когда размер файла составляет 256 КБ или больше, но производительность очевидна для файлов размером более 1 МБ.

Вот несколько приемов, рекомендуемых для лучших практик:

  • Отключение службы индексирования (отключение индексирования томов NTFS, на которых хранятся данные FILESTREAM).
  • Несколько файлов данных для FileStreamfilegroup в отдельных томах.
  • Настройка правильного размера кластера NTFS (рекомендуется 64 КБ)
  • Настройка антивируса (нельзя удалить какой-либо файл FILESTREAM, иначе ваша БД будет повреждена).
  • Отключение атрибута Last AccessTime.
  • Обычная дефрагментация диска.
  • Отключение коротких имен файлов (8dot3)
  • Храните контейнеры данных FILESTREAM на отдельном томе диска (mdf, ndf и журнал).

Прямо сейчас мы проводим некоторые тесты для переноса нашей базы данных FileUpload (8 ТБ и 25 миллионов записей) с varbinary(max) на использование FileTable. Наш подход заключается в том, чтобы разбить очень большую базу данных на базу данных в год.

Я хотел бы знать, работаете ли вы в настоящее время над этим в производственной среде и знаете ли вы свой опыт.

Дополнительную информацию можно найти в бесплатной электронной книге: Art of Файловый поток

person ByAlaN    schedule 22.04.2020