次の方法で共有


sp_filestream_force_garbage_collection (Transact-SQL)

適用対象: SQL Server

FILESTREAM ガベージ コレクター (GC) を強制的に実行し、不要な FILESTREAM ファイルを削除します。

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 を実行するデータベースの名前を示します。

@dbnamesysname です。 指定しない場合、現在のデータベースが想定されます。

[ @filename = ] 'logical_file_name'

GC を実行する FILESTREAM コンテナーの論理名を指定します。 @filename は省略可能です。 論理ファイル名が指定されていない場合、GC は指定されたデータベース内のすべての FILESTREAM コンテナーをクリーンアップします。

リターン コードの値

Value 説明
0 操作に成功しました。
1 操作エラー

結果セット

Value 説明
file_name FILESTREAM コンテナー名を示します。
num_collected_items このコンテナーでガベージ コレクション (削除) された FILESTREAM 項目 (ファイルまたはディレクトリ) の数を示します。
num_marked_for_collection_items このコンテナーで GC としてマークされている FILESTREAM 項目 (ファイルまたはディレクトリ) の数を示します。 これらの項目はまだ削除されていませんが、GC フェーズの後に削除できる可能性があります。
num_unprocessed_items この FILESTREAM コンテナー内の GC に対して処理されなかった、対象となる FILESTREAM 項目 (ファイルまたはディレクトリ) の数を示します。 項目は、次のようなさまざまな理由で処理されない場合があります。

- ログ バックアップまたはチェックポイントが取得されていないためにピン留めする必要があるファイル。

- FULL またはBULK_LOGGED復旧モデル内のファイル。

- 実行時間の長いアクティブなトランザクションがあります。

- レプリケーション ログ リーダー ジョブが実行されていません。 詳細については、ホワイト ペーパー SQL Server 2008 のFILESTREAM Storage を参照してください。
last_collected_xact_seqno 指定した FILESTREAM コンテナー内の、ガベージ コレクションが実行されたファイルに対応する最後のログ シーケンス番号 (LSN) を返します。

解説

FILESTREAM ガベージ コレクション タスクを明示的に実行して、要求されたデータベース (および FILESTREAM コンテナー) で完了します。 GC プロセスでは、不要になったファイルが削除されます。 この操作を完了するために必要な時間は、そのデータベースまたはコンテナー内の FILESTREAM データのサイズと、FILESTREAM データで最近発生した DML アクティビティの量によって異なります。 この操作はデータベースをオンラインで実行できますが、GC プロセスによって実行されるさまざまな I/O アクティビティが原因で、データベースの実行中のパフォーマンスに影響する可能性があります。

Note

この操作は、必要な場合と通常の営業時間外にのみ実行することをお勧めします。

このストアド プロシージャの複数の呼び出しは、個別のコンテナーまたは個別のデータベースでのみ同時に実行できます。

2 フェーズ操作のため、ストアド プロシージャを 2 回実行して、基になる FILESTREAM ファイルを実際に削除する必要があります。

ガベージ コレクションはログの切り捨てに依存します。 そのため、完全復旧モデルを使用してデータベース上のファイルが最近削除された場合、それらのファイルは、それらのトランザクション ログ部分のログ バックアップが作成された後にのみガベージ コレクションされ、ログ部分は非アクティブとしてマークされます。 単純復旧モデルを使用するデータベースでは、データベースに対して CHECKPOINT が発行された後、ログの切り捨てが発生します。

アクセス許可

db_owner データベース ロールのメンバーシップが必要です。

次の例では、 fsdb データベース内の FILESTREAM コンテナーに対して 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';