首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用LOB data sql server 2017收缩数据文件

无法使用LOB data sql server 2017收缩数据文件
EN

Database Administration用户
提问于 2022-02-16 18:27:51
回答 1查看 319关注 0票数 1

我有一个巨大的表,它使用数据类型"image". 存储pdf文档。

最近,我们开始将文件卸载到blob存储,这就是我们希望缩小主数据文件的原因。

我所有缩小文件的尝试都没有成功。

通常情况下,它只占97%-98%,不会有任何进展。

即使被小块缩小,1024 mb也不起作用。

我还应该做些什么来解决这个问题?

这是我用来缩小的查询:

代码语言:javascript
复制
DECLARE @i int = 4501095 -- set original size

WHILE @i >= 4481000 Begin -- set final size
DBCC SHRINKFILE (N'DataFile' , @i)
--Shrink by 1024 MB at a time. 
SET @i -= 1024
END
GO

表描述:

表占数据库的80%,有:

行数:6 472 619行;

尺寸: 2641.5 GB;

LOB数据:容量约2639.1 GB

数据文件:

EN

回答 1

Database Administration用户

发布于 2022-02-17 10:34:06

对这个表进行表格扫描需要多长时间,包括读取LOB数据?把它乘以346,161,152,你就会得到一个完整的收缩所需的时间,大致上是这样。然后根据它到达目标文件大小的点来减少一些。还有很长一段时间。

说你一次只缩小了1GB。这是131,072页。说这些页面中只有10万页是LOB页面。仍然有大量的桌子扫描!

想想心理医生是怎么做的。它将页面从文件的末尾移动到文件的开头。对于LOB页,Server需要调整该页的任何点,以反映新的页添加。LOB页面没有回指针,因此它需要对移动的每一页进行表扫描。那可是一大堆桌子扫描啊!

当然,当它达到目标尺寸时,收缩就会停止。

这里有一些细节,但上面并没有改变。LOB类型的数据可以是行(如果合适的话),但是既然您说您有2639 GB的LOB数据,那么我假设它们实际上是LOB页面。lob页面可以在行之间共享,与预约会设计相比,可以减少空间使用,也可以专门用于一行。LOB数据也有一个B树结构(允许“在中间搜索”),但是树中的节点不一定是页面,它们是页面上的数据。因此,不管细节如何,如果确实是移动的LOB页面,那么所有的页面都需要被读取,以确定哪些页面可能指向这个已移动的LOB页面。

在你的情况下,就住在自由的空间里。它不会伤害任何东西,也不会使您的备份变得更大(因为备份只备份已使用的区段)。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/307590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档