sp_filestream_force_garbage_collection (Transact-SQL)

適用於:SQL Server

強制 FILESTREAM 垃圾收集行程 (GC) 執行,刪除任何不需要的 FILESTREAM 檔案。

在 GC 清除其內所有已刪除的檔案之前,無法移除 FILESTREAM 容器。 FILESTREAM GC 會自動執行。 不過,如果您需要在 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'

指定要執行 GC 之 FILESTREAM 容器的邏輯名稱。 @filename是選擇性的。 如果未指定任何邏輯檔名,GC 會清除指定資料庫中的所有 FILESTREAM 容器。

傳回碼值

Description
0 作業成功
1 作業失敗

結果集

Description
file_name 指出 FILESTREAM 容器名稱
num_collected_items 指出此容器中已垃圾收集的 FILESTREAM 專案 (檔案或目錄) 數目。
num_marked_for_collection_items 指出此容器中已標示為 GC 的 FILESTREAM 專案 (檔案或目錄) 數目。 這些專案尚未刪除,但可能會在 GC 階段之後進行刪除。
num_unprocessed_items 指出此 FILESTREAM 容器中未針對 GC 處理的合格 FILESTREAM 專案(檔案或目錄)數目。 專案可能會因為各種原因而未處理,包括:

- 因為尚未進行記錄備份或檢查點,因此需要釘選的檔案。

- 完整或BULK_LOGGED恢復模式下的檔案。

- 有長時間執行的作用中交易。

- 複寫記錄讀取器作業尚未執行。 如需詳細資訊,請參閱 SQL Server 2008 中的 FILESTREAM 儲存體 白皮書
last_collected_xact_seqno 傳回最後一個對應的記錄序號 (LSN),檔案已針對指定的 FILESTREAM 容器進行垃圾收集。

備註

明確執行 FILESTREAM 垃圾收集工作,以在要求的資料庫上完成 (和 FILESTREAM 容器)。 GC 程式會移除不再需要的檔案。 此作業完成所需的時間取決於該資料庫或容器中的 FILESTREAM 數據大小,以及最近發生在 FILESTREAM 數據上的 DML 活動數量。 雖然這項作業可以在在線與資料庫一起執行,但由於 GC 程式完成的各種 I/O 活動,這可能會影響資料庫執行期間的效能。

注意

建議只有在必要且在一般作業時間以外執行此作業。

此預存程式的多個調用只能同時在個別的容器或個別資料庫上執行。

由於兩階段作業,預存程式應該執行兩次,以實際刪除基礎 FILESTREAM 檔案。

垃圾收集依賴記錄截斷。 因此,如果使用完整恢復模式最近在資料庫上刪除檔案,只有在擷取這些事務歷史記錄部分的記錄備份之後,才會進行垃圾收集,而且記錄部分會標示為非使用中。 在使用簡單恢復模式的資料庫上,記錄截斷會在針對資料庫發出 之後 CHECKPOINT 發生。

權限

需要db_owner資料庫角色的成員資格。

範例

下列範例會在資料庫中執行 FILESTREAM 容器的 fsdb GC。

A. 未指定容器

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