21.6.26

Советы и хитрости для высокой производительности FILESTREAM

Автор: Paul Randal, High-performance FILESTREAM tips and tricks

У меня было много вопросов о производительности FILESTREAM и о том, как заставить NTFS хорошо масштабироваться. Я только что закончил писать 30-страничный технический документ о FILESTREAM для команды SQL Server, который должен быть опубликован до конференции PASS 2008 в ноябре. Хотя мой технический документ не совсем о производительности, в нём есть длинный раздел о настройке системы для достижения высокой производительности FILESTREAM. В этой статье я хочу дать список рекомендаций, которые помогут вам добиться хорошей производительности. Все они более подробно описаны в техническом документе.

Вот они, в произвольном порядке:

  • Убедитесь, что вы храните данные правильного размера правильным способом. Джим Грей и др. опубликовали исследовательскую статью под названием «To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem?». Краткое изложение выводов: BLOB-объекты размером менее 256 КБ следует хранить в базе данных, а размером 1 МБ или более — в файловой системе. Для промежуточных значений «зависит от обстоятельств» — мой любимый ответ. Суть в том, что вы не получите хорошей производительности, если будете хранить много маленьких BLOB-объектов в FILESTREAM.
  • Используйте соответствующий уровень RAID для тома NTFS, который будет содержать контейнер данных FILESTREAM. Не используйте RAID-5, например, для рабочей нагрузки с интенсивной записью (рекомендация была актуальной для жёстких дисков).
  • Используйте соответствующую дисковую технологию. SCSI обычно будет быстрее, чем SATA/IDE, но дороже. Это связано с тем, что SCSI-диски обычно имеют более высокую скорость вращения, а значит, меньшую задержку и время поиска (сейчас актуальны другие интерфейсы, например PCIe).
  • Какую бы дисковую технологию вы ни выбрали, если SATA, убедитесь, что она поддерживает NCQ, а если SCSI — CTQ. Обе эти технологии позволяют дискам обрабатывать несколько чередующихся операций ввода-вывода одновременно.
  • Разделите контейнеры данных. Отделите их друг от друга, а также от других файлов данных и журналов базы данных. Это позволяет избежать конкуренции за головки жёстких дисков.
  • Дефрагментируйте том NTFS при необходимости перед настройкой FILESTREAM и периодически для поддержания хорошей производительности сканирования (если данные размещены на массивах жёстких дисков).
  • Отключите генерацию имён 8.3 на томе NTFS. Это алгоритм порядка N, который должен проверять, что новое сгенерированное имя не конфликтует с существующими именами в каталоге. Это значительно замедляет производительность вставки и обновления. Сделайте это с помощью утилиты командной строки fsutil.
  • Отключите отслеживание времени последнего доступа с помощью fsutil.
  • Установите соответствующий размер кластера NTFS. Для BLOB-объектов размером 1 МБ или более используйте размер кластера 64 КБ. Это поможет уменьшить фрагментацию.
  • Частичное обновление данных FILESTREAM создаёт новый файл. Группируйте множество мелких обновлений в одно большое, чтобы уменьшить износ.
  • При передаче данных обратно клиенту используйте размер буфера SMB около 60 КБ (или кратный ему). Это сделано для того, чтобы буферы не становились чрезмерно фрагментированными, так как буферы TCP/IP имеют размер 64 КБ.

Надеюсь, это поможет!

Комментариев нет:

Отправить комментарий