Одной из проблем, с которыми сталкиваются пользователи SQL Server, является управление дисковым пространством, особенно при использовании функции filestream. В недавнем случае с одним из моих клиентов они сообщили о нехватке свободного дискового пространства на диске, где хранятся их файлы filestream. Этот клиент сильно полагается на функцию filestream, поэтому важно найти решение этой проблемы.
После исследования проблемы я обнаружил, что медленное освобождение дискового пространства filestream после удаления записей из таблиц базы данных связано с процессом сборщика мусора. Этот процесс удаляет файлы из операционной системы, когда соответствующие записи удаляются из таблицы. Хотя в Интернете есть множество статей, объясняющих внутреннее устройство этого процесса, я предоставлю обходное решение/решение для решения этой проблемы.
Если вы столкнулись с ситуацией, когда дисковое пространство не освобождается даже после удаления данных, и ваша база данных является высокотранзакционной, вы можете предпринять следующие шаги:
- Убедитесь, что на регулярной основе нет много активности. Если возможно, выполните ручную контрольную точку в базе данных.
- Регулярно выполняйте резервное копирование журнала транзакций, особенно если вы используете модель восстановления FULL или BULK_LOGGED.
- Проверьте наличие долго выполняющихся транзакций в базе данных и устраните их соответствующим образом.
- Если были выполнены вышеуказанные шаги и свободное пространство по-прежнему заканчивается, вы можете использовать хранимую процедуру
sp_filestream_force_garbage_collectionдля принудительной очистки мусора. Вот синтаксис:
EXEC sp_filestream_force_garbage_collection @dbname = 'ИмяБазыДанныхЗдесь'Чтобы автоматизировать этот процесс, вы можете создать задание SQL Server Agent для выполнения хранимой процедуры sp_filestream_force_garbage_collection с наименьшей возможной частотой.
Следуя этим шагам, вы можете эффективно управлять дисковым пространством при использовании функции filestream в SQL Server.
Ссылка: Pinal Dave (https://blog.sqlauthority.com)