Автор — Pinal Dave
Что такое FILESTREAM?
FILESTREAM новая возможность, которая появилась в SQL Server 2008. Данная технология позволяет эффективно хранить и использовать данные больших размеров (BLOB).
Большинство приложений, которые работают с BLOB сегодня, хранят сами данные на файловой системе, а ссылки на них в БД. Хранение BLOB на файловой системе более эффективно, чем хранение их в БД, но у данного метода есть свои недостатки. Когда BLOB хранятся на файловой системе, тяжело сохранить транзакционную целостность между файловой системой и БД.
Чтобы избежать проблем целостности, некоторые приложение хранят BLOB внутри БД, это плохо сказывается на производительности.
FILESTREAM позволяет комбинировать оба подхода, чтобы избежать недостатков. FILESTREAM хранит BLOB на файловой системе и в то же время позволяет добиться транзакционной целостности между BLOB на файловой системе и БД.
Виды ожиданий FILESTREAM
FS_FC_RWLOCK
Данный тип ожиданий создаётся сборщиком мусора (Garbage Collector) FILESTREAM.
FS_GARBAGE_COLLECTOR_SHUTDOWN
Возникает когда сборщик мусора FILESTREAM ожидает завершения задач очистки.
FS_HEADER_RWLOCK
Показывает что процесс ожидает доступа к FILESTREAM заголовку файла для операции чтения или записи. FILESTREAM заголовок — это файл на файловой системе, который имеет имя “filestream.hdr”.
FS_LOGTRUNC_RWLOCK
Связано с усечением операции FILESTREAM в журнале транзаций. Может быть вызвано необходимостью сделать резервную копию журнала транзакций.
FSAGENT
Связано с операциями ввода-вывода для файлов FILESTREAM.
FSTR_CONFIG_MUTEX
Возникает во время перенастройки FILESTREAM.
FSTR_CONFIG_RWLOCK
Связано с serialize доступом к параметрам конфигурации FILESTREAM.
Ожидания и производительность
В большинстве случаев ожидания ухудшают производительность. В документации SQL Server почти ничего не сказано о способам уменьшения ожиданий, однако вы всегда можете воспользоваться FILESTREAM best practices чтобы улучшить производительность и уменьшить ожидания.
Заметка: Представленная тут информация является исключительно моим опытом. Я настаиваю на том, чтобы вы читали Books On-Line. Все мои рассуждения о ожиданиях носят исключительно общий характер и варьируются от системы к системе. Прежде чем использовать это на рабочем сервере, рекомендую провести тестирование на сервере разработки.