我已在 SQL 2008 服务器上成功设置了 FILESTREAM;但是我注意到,即使我删除了包含 FILESTREAM 数据的行,物理数据文件似乎也没有被删除....
我已在 SQL 2008 服务器上成功设置了 FILESTREAM;但是我注意到,即使我删除了包含 FILESTREAM 数据的行,物理数据文件似乎也没有被删除。
我所说的物理文件是指 SQLServer 托管目录中以唯一标识符作为文件名的文件,而不是添加到数据库中的原始文件。
有人知道 SQLServer 最终是否会删除该文件吗?如果从数据库中删除了大量大文件,我希望能够快速回收空间,仅此而已。
FILESTREAM
数据受到交易控制,因此不会被立即删除。
相反, SQL Server
运行垃圾收集器,当确定旧数据最终被删除时,它会清除旧数据。
来自 文档 :
FILESTREAM
垃圾收集是由数据库检查点进程触发的后台任务。生成足够的事务日志后,将自动运行检查点。有关详细信息,请参阅 SQL Server 2008 联机丛书 主题“CHECKPOINT
和日志的活动部分”( http://msdn.microsoft.com/en-us/library/ms189573.aspx )。由于FILESTREAM
文件操作在数据库的事务日志中记录的最少,因此生成的事务日志记录数量可能需要一段时间才能触发检查点进程并进行垃圾收集。如果这成为一个问题,您可以使用语句强制进行垃圾收集CHECKPOINT
。