我第一次使用filestream数据类型(SQL Server 2008),在进行快速插入/删除时遇到了问题。基本上,文件从文件系统中实际删除的速度远远慢于插入/删除速度,即使我手动调用垃圾回收器(据我所知,CHECKPOINT应该调用垃圾回收器)。
下面的代码说明了问题-执行大约需要30秒,但您必须等待几分钟才能从文件系统中删除最后一个文件(当我查找C:\ FSTest \ Files文件夹时)。
有没有办法加快垃圾回收器的速度?(它似乎每10秒钟大约删除20个文件-这使我相信,如果我每秒存储/删除超过2个记录,最终将填满硬盘)
谢谢
下面的代码说明了问题-执行大约需要30秒,但您必须等待几分钟才能从文件系统中删除最后一个文件(当我查找C:\ FSTest \ Files文件夹时)。
有没有办法加快垃圾回收器的速度?(它似乎每10秒钟大约删除20个文件-这使我相信,如果我每秒存储/删除超过2个记录,最终将填满硬盘)
谢谢
CREATE DATABASE FSTest ON PRIMARY
(NAME = FSTest_data, FILENAME = N'C:\FSTest\FSTest_data.mdf'),
FILEGROUP FSTestFileGroup CONTAINS FILESTREAM
(NAME = FSTestFiles,FILENAME = N'C:\FSTest\Files')
LOG ON
(NAME = 'FSTest_log', FILENAME = N'C:\FSTest\FSTest_log.ldf');
GO
USE FSTest;
GO
CREATE TABLE FSTest (
Guid UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWSEQUENTIALID(),
Name VARCHAR (25),
Data VARBINARY(MAX) FILESTREAM);
GO
ALTER DATABASE FSTest SET RECOVERY SIMPLE;
GO
SET NOCOUNT ON
DECLARE @test int
SET @test=0
WHILE @test<1000 BEGIN
INSERT INTO FSTest(Name,Data) VALUES('test',CAST('abc' AS VARBINARY(MAX)))
DELETE FROM FSTest WHERE Name='test'
CHECKPOINT
SET @test = @test+1
END
更新:
我尝试以更接近我的需求的插入/删除速度进行更长时间的测试,执行了30分钟后,情况是相同的: 文件创建比删除要快得多。
SET NOCOUNT ON
DECLARE @test int
SET @test=0
WHILE @test<100000 BEGIN
INSERT INTO FSTest(Name,Data) VALUES('test',CAST('abc' AS VARBINARY(MAX)))
DELETE FROM FSTest WHERE Name='test'
WAITFOR DELAY '00:00:00:200'
CHECKPOINT
SET @test = @test+1
END