質問

SQL 2008サーバーでFILESTREAMを正常にセットアップしました。ただし、FILESTREAMデータを含む行を削除しても、物理データファイルが削除されないように見えることに気付きました。

物理ファイルとは、dbaseに追加された元のファイルではなく、ファイル名としてuniqueidentiferを持つSQLServerの管理ディレクトリ内のファイルを意味します。

SQLServerが最終的にファイルを削除するかどうかは誰にもわかりませんか? dbaseから大量の大きなファイルが削除された場合、スペースをすぐに回収できると期待しています。

役に立ちましたか?

解決

FILESTREAM データはトランザクション制御の対象であるため、すぐには削除されません。

代わりに、 SQL Server はガベージコレクターを実行し、古いデータが最終的に削除されたことが確実になったときにパージします。

documentation から:

  

FILESTREAM ガベージコレクションは、データベースチェックポイントプロセスによってトリガーされるバックグラウンドタスクです。十分なトランザクションログが生成されると、チェックポイントが自動的に実行されます。詳細については、 SQL Server 2008 Books Online のトピック“ CHECKPOINT およびログのアクティブな部分を参照してください。 ( http://msdn.microsoft.com/en-us/library/ms189573。 aspx )。 FILESTREAM ファイル操作がデータベースのトランザクションログに最小限記録されるため、生成されたトランザクションログレコードの数がチェックポイントプロセスをトリガーし、ガベージコレクションが発生するまでに時間がかかる場合があります。これが問題になる場合は、 CHECKPOINT ステートメントを使用してガベージコレクションを強制できます。

他のヒント

使用

sp_filestream_force_garbage_collection

残念ながら、これは機能します> = SQL Server 2012

tbl_XXXからの削除DECLARE @test CHECKPOINT @test = 0

SQLサーバーでこれを実行します また、ファイルシステムからファイルが削除されるのを確認できます。

削除操作の実行後、ガベージコレクターがファイルシステムからファイルをクリーンアップするまで待機する分数または秒数を設定できます。

ありがとう

ハラナス

まず、 -garbage-collection "rel =" nofollow noreferrer ">ガベージコレクターの動作。行を削除した後、このコードを実行して、どの行にも属さないすべてのファイルを削除できます。

USE [DataBaseName]
GO

-- Create a checkpoint on current database
CHECKPOINT
GO 

-- Execute Garbage Collector after a checkpoint created
EXEC sp_filestream_force_garbage_collection  'DataBaseName'
GO
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top