回答

收藏

SQL Server文件流-删除已填充。

技术问答 技术问答 214 人阅读 | 0 人回复 | 2023-09-14

我第一次使用文件流数据类型(SQL Server
# L' I3 {; D  J7 c2008年),在执行一些快速插入/删除操作时遇到问题。基本上,即使我手动调用垃圾收集器,从文件系统中删除文件的速度也比插入/删除慢(据我所知,CHECKPOINT垃圾收集器应调用)。5 S' G# `% Z$ a( ?0 v$ u9 e; E9 {
下面的代码解释了这个问题-执行大约需要30秒,但您必须等待几分钟才能从文件系统中删除最后一个文件(当我搜索时C:\ FSTest \ Files文件夹时)
# \/ y  T! U4 g. L+ n有没有办法加快垃圾收集器的速度?(似乎每10秒删除20份文件-这让我相信,如果每秒存储/删除超过2个记录,我最终会填写硬盘驱动器)4 U* }$ o- w: n. C9 J. |( r; A
谢谢
# G& e2 ~/ ?' R* r9 pCREATE 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');GOUSE FSTest;GOCREATE TABLE FSTest  Guid UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWSEQUENTIALID(),   Name VARCHAR (25),            Data VARBINARY(MAX) FILESTREAM);GOALTER DATABASE FSTest SET RECOVERY SIMPLE;GOSET NOCOUNT ONDECLARE @test intSET @test=0WHILE @test更新:我尝试了更长时间的相同操作,但它的插入/删除速度更接近我的需求,执行30分钟后,我可以观察到相同的情况:文件创建得更快,然后被删除。- O9 s/ d; j2 k- l( M" w# x& r" W
SET NOCOUNT ONDECLARE @test intSET @test=0WHILE @test经过更多的研究(并感谢)Paul Randal的博客-- l( ?2 ]/ J& ~8 J; [2 {" U( D9 P5 \
文件流和垃圾收集的大量非常详细的信息)一旦删除并执行检查点,将文件放入系统表中(Tombstone表)中,然后将每个运行一个进程(“
4 V1 P3 i. R, @  u' WGhost清理)10秒,从表中删除一些项目(准确地说是20项)。因此,基本上我们只删除2次/秒,似乎没有办法改变这种行为。
- S" {6 i* m2 m0 {5 V1 L因为我每秒要删除四次,所以我需要找到它filestream替代方法。. F2 v- @: U9 s) C+ y+ s
感谢您的投资。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则