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 アイテム (ファイルまたはディレクトリ) の数を示します。 アイテムは次のようなさまざまな理由で処理されないことがあります。
|
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';