Share via


sp_filestream_force_garbage_collection (Transact-SQL)

強制執行 FILESTREAM 記憶體回收行程,刪除任何不必要的 FILESTREAM 檔案。

在 FILESTREAM 容器內所有已刪除的檔案都已經由記憶體回收行程清除之前,無法移除容器。 FILESTREAM 記憶體回收行程會自動執行。 但是,如果您需要在記憶體回收行程執行之前移除容器,可以使用 sp_filestream_force_garbage_collection,以手動方式執行記憶體回收行程。

語法

sp_filestream_force_garbage_collection [ @dbname = ]  'database_name'  , @filename = 'logical_file_name' ]

引數

  • @dbname = database_name**'**
    表示要執行記憶體回收行程之資料庫的名稱。

    [!附註]

    dbname 為 sysname。 如果未指定,則假設目前的資料庫。

  • @filename = logical_file_name
    指定要執行記憶體回收行程之 FILESTREAM 容器的邏輯名稱。 @filename 是選擇性的。 如果沒有指定邏輯檔名,記憶體回收行程會清除指定資料庫中的所有 FILESTREAM 容器。

傳回碼值

說明

0

作業成功

1

作業失敗

結果集

說明

file_name

指出 FILESTREAM 容器名稱

num_collected_items

指出在這個容器中已進行記憶體回收 (已刪除) 的 FILESTREAM 項目 (檔案/目錄) 的數目。

num_marked_for_collection_items

指出在這個容器中已標示為記憶體回收的 FILESTREAM 項目 (檔案/目錄) 的數目。 這些項目尚未刪除,但適合在下一個記憶體回收階段中刪除。

num_unprocessed_items

指出在這個 FILESTREAM 容器中適合記憶體回收但未處理的 FILESTREAM 項目 (檔案或目錄) 的數目。

項目可能因各種原因未處理,包括下列:

  • 因為尚未進行記錄備份或檢查點而需要確定的檔案。

  • 在 FULL 或 BULK_LOGGED 復原模式中的檔案。

  • 有長時間執行的使用中交易。

  • 複寫記錄讀取器作業尚未執行。如需詳細資訊,請參閱<SQL Server 2008 中的 FILESTREAM 儲存體>白皮書。

last_collected_xact_seqno

傳回指定 FILESTREAM 容器中已進行記憶體回收之檔案的最後一個對應記錄序號 (LSN)。

備註

在要求的資料庫 (和 FILESTREAM 容器) 上,明確執行完成 FILESTREAM 記憶體回收行程工作。 記憶體回收處理序會移除不再需要的檔案。 完成此作業的所需時間取決於該資料庫或容器中的 FILESTREAM 資料大小,以及 FILESTREAM 資料上最近發生的資料操作語言 (DML) 活動量。 雖然這項作業可以在資料庫上線時執行,但因為記憶體回收處理序進行各種 I/O 活動,這可能會影響資料庫執行期間的效能。

[!附註]

建議您只在必要時和一般作業時間以外執行這項作業。

只能在不同的容器或不同的資料庫上同時執行此預存程序的多個引動過程。

權限

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

範例

下列範例會針對 FSDB 資料庫中的 FILESTREAM 容器執行記憶體回收行程。

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

請參閱

其他資源

SQL Server 2008 中的 FILESTREAM 儲存體