如何缩减添加Filestream列后的SQL Server数据表体积?
问题:为现有表添加Filestream列后的数据表体积优化
我正在开发数据库功能,要给若干数据表启用Filestream功能。目前SQL Server及目标数据库的Filestream均已启用,无论是新建带Filestream列的数据表,还是为现有数据表添加Filestream列,操作均能正常执行,文件也会生成在FS目录中,但遇到了数据表体积异常的问题:
- 新建表并插入/复制数据后,表体积(示例)不足1MB;
- 为现有表添加新列并复制数据后,表体积超过10MB。
我启用FS并复制数据的操作步骤如下:
EXEC sys.sp_rename @objname = N'dbo.tImage.bImage', @newname = bImage_OLD, @objtype = 'COLUMN' ALTER TABLE dbo.tImage ADD bImage VARBINARY(MAX) FILESTREAM NULL UPDATE dbo.tImage SET bImage = bImage_OLD ALTER TABLE dbo.tImage DROP COLUMN Image_OLD
请问如何在不新建表的前提下缩减添加新列后的数据表体积?我已尝试收缩数据库文件和事务日志,执行了DBCC CHECKDB REPAIR_REBUILD,操作如下:
DBCC SHRINKFILE(2) DBCC SHRINKFILE(2, EMPTYFILE) DBCC CLEANTABLE(myDB, 'dbo.tImage') DBCC DROPCLEANBUFFERS
多数文档提到需新建数据库并插入新行,我也找到过一篇介绍类似数据复制方式的博客。
更新:
向修改后的表添加新图片时,表体积不再增大,这算部分成功,但我希望初始表体积尽可能小,且明确知道存在优化空间。使用以下代码似乎解决了问题,我之前尝试过但因架构问题出现其他异常,需进一步排查:
DBCC CLEANTABLE(database, 'tImage')
内容的提问来源于stack exchange,提问作者Shano
相关产品推荐
相关产品推荐

