我已成功在我的SQL 2008服務器上設置了FILESTREAM;但是我注意到,即使當我刪除包含FILESTREAM數據的行時,物理數據文件似乎也不會被刪除。刪除行後留下FILESTREAM文件
通過物理文件,我指的是SQLServer的託管目錄中的文件,其中uniqueidentifer作爲文件名而不是添加到dbase的原始文件。
有誰知道SQLServer是否會最終刪除文件?如果從dbase中刪除了大量大文件,我希望能夠快速回收這些空間。
謝謝,
戴爾
我已成功在我的SQL 2008服務器上設置了FILESTREAM;但是我注意到,即使當我刪除包含FILESTREAM數據的行時,物理數據文件似乎也不會被刪除。刪除行後留下FILESTREAM文件
通過物理文件,我指的是SQLServer的託管目錄中的文件,其中uniqueidentifer作爲文件名而不是添加到dbase的原始文件。
有誰知道SQLServer是否會最終刪除文件?如果從dbase中刪除了大量大文件,我希望能夠快速回收這些空間。
謝謝,
戴爾
FILESTREAM
數據是受事務控制,因此不會立即刪除。
取而代之的是,SQL Server
運行一個垃圾收集器,它在確定它最終被刪除時清除舊數據。
FILESTREAM
垃圾收集是由數據庫檢查點進程觸發的後臺任務。當生成足夠的事務日誌時,檢查點會自動運行。有關詳細信息,請參閱SQL Server 2008聯機叢書主題「CHECKPOINT
和日誌的活動部分」(http://msdn.microsoft.com/en-us/library/ms189573.aspx)。考慮到FILESTREAM
文件操作在數據庫的事務日誌中被最小化記錄,在生成的事務日誌記錄數量觸發檢查點進程併發生垃圾回收之前可能需要一段時間。如果這成爲問題,您可以使用CHECKPOINT
語句強制垃圾回收。
DELETE FROM tbl_XXX DECLARE @test CHECKPOINT @test = 0
運行此在您的SQL Server 和您可以觀察到文件中獲取從文件系統也刪除..
您可以設置在執行刪除操作後等待垃圾收集器清理文件系統中的文件的分鐘數或秒數。
感謝
哈拉納
簡單:DELETE FROM表CHECKPOINT – DanDan 2010-05-05 12:07:21
@DanDan我知道這就像年前但我只是想警告其他用戶在刪除表CHECKPOINT命令時意外刪除表中的所有行的危險 用過的。我試過了,它刪除了我的表中的所有行。幸運的是,我的表格只包含示例數據。 – corix010 2014-12-08 17:03:29