Поделиться через


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';