sp_filestream_force_garbage_collection (Transact-SQL)
Область применения: SQL Server
Принудительно запускает сборщик мусора FILESTREAM (GC), удаляя ненужные файлы FILESTREAM.
Контейнер FILESTREAM не может быть удален до тех пор, пока все удаленные файлы в нем не будут удалены GC. GC FILESTREAM выполняется автоматически. Однако если необходимо удалить контейнер перед запуском GC, можно использовать sp_filestream_force_garbage_collection
для запуска GC вручную.
Соглашения о синтаксисе Transact-SQL
Синтаксис
sp_filestream_force_garbage_collection
[ @dbname = ] 'database_name'
[ , [ @filename = ] 'logical_file_name' ]
[ ; ]
Аргументы
[ @dbname = ] 'database_name'
Указывает имя базы данных для запуска GC.
@dbname — sysname. Если он не указан, предполагается текущая база данных.
[ @filename = ] 'logical_file_name'
Указывает логическое имя контейнера FILESTREAM для запуска GC. @filename является необязательным. Если имя логического файла не указано, GC очищает все контейнеры FILESTREAM в указанной базе данных.
Значения кода возврата
значение | Описание |
---|---|
0 |
Операция выполнена успешно |
1 |
Ошибка при выполнении операции |
Результирующий набор
значение | Описание |
---|---|
file_name |
Указывает имя контейнера FILESTREAM |
num_collected_items |
Указывает количество элементов FILESTREAM (файлов или каталогов), собранных мусором (удаленных) в этом контейнере. |
num_marked_for_collection_items |
Указывает количество элементов FILESTREAM (файлов или каталогов), помеченных для GC в этом контейнере. Эти элементы еще не удалены, но могут иметь право на удаление после этапа GC. |
num_unprocessed_items |
Указывает количество допустимых элементов FILESTREAM (файлов или каталогов), которые не были обработаны для GC в этом контейнере FILESTREAM. Элементы могут быть необработанные по различным причинам, в том числе: — Файлы, которые необходимо закрепить, так как резервная копия журнала или контрольная точка не были приняты. — Файлы в модели полного или BULK_LOGGED восстановления. — Существует длительная активная транзакция. — Задание чтения журнала репликации не выполняется. Дополнительные сведения см. в техническом документе в хранилище FILESTREAM в SQL Server 2008 . |
last_collected_xact_seqno |
Возвращает последний соответствующий номер последовательности LSN, до которого для файлов была выполнена сборка мусора в указанном контейнере FILESTREAM. |
Замечания
Явным образом выполняет задачу сборки мусора FILESTREAM для завершения запрошенной базы данных (и контейнера FILESTREAM). Процесс GC удаляет файлы, которые больше не нужны. Время, необходимое для выполнения этой операции, зависит от размера данных FILESTREAM в этой базе данных или контейнере, а также количества действий DML, которые недавно произошли в данных FILESTREAM. Хотя эта операция может выполняться с базой данных в сети, это может повлиять на производительность базы данных во время выполнения из-за различных действий ввода-вывода, выполняемых процессом GC.
Примечание.
Рекомендуется запускать эту операцию только при необходимости и вне обычных часов работы.
Несколько вызовов этой хранимой процедуры можно осуществить одновременно только в различных контейнерах или базах данных.
Из-за двухэтапных операций хранимая процедура должна выполняться дважды, чтобы фактически удалить базовые файлы FILESTREAM.
Сборка мусора зависит от усечения журнала. Таким образом, если файлы были удалены недавно в базе данных с помощью полной модели восстановления, они собираются только после создания резервной копии этих частей журнала транзакций, а часть журнала помечается неактивной. В базе данных с помощью простой модели восстановления происходит усечение журнала после CHECKPOINT
выдачи базы данных.
Разрешения
Требуется членство в роли базы данных db_owner .
Примеры
В следующих примерах выполняется GC для контейнеров FILESTREAM в fsdb
базе данных.
А. Указание контейнера не
USE fsdb;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'fsdb';
B. Указание контейнера
USE fsdb;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'fsdb',
@filename = N'FSContainer';