sp_filestream_force_garbage_collection (Transact-SQL)
適用於:SQL Server
強制 FILESTREAM 垃圾收集行程 (GC) 執行,刪除任何不需要的 FILESTREAM 檔案。
在 GC 清除其內所有已刪除的檔案之前,無法移除 FILESTREAM 容器。 FILESTREAM GC 會自動執行。 不過,如果您需要在 GC 執行之前移除容器,您可以使用 sp_filestream_force_garbage_collection
手動執行 GC。
語法
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';