我有一个大小为 11TB 的数据库。我最近从这个数据库中截断了超过 5TB 的数据。
(我完全熟悉您通常不会收缩数据库的所有原因)
我很好奇 DBCC SHRINKFILE 命令实际上在做什么,因为当我运行该命令来缩小一个大小约为 650000MB 且可用空间为 45% 的文件时,它似乎实际上并没有移动任何页面。
有问题的代码是:
USE [CAF]
GO
DBCC SHRINKFILE (N'FILENAME' , 650239)
GO
Run Code Online (Sandbox Code Playgroud)
当我在执行 DBCC SHRINKFILE 时监视服务器的性能指标时,我看到以下内容
即使我告诉 DBCC SHRINKFILE 将文件缩小 1 MB 并让它运行 30 分钟,它也不会完成。
我读过的所有内容都表明 DBCC SHRINKFILE 应该从文件末尾获取页面并将它们移动到开头附近的可用空间,但即使在最差的性能下,移动 1MB 的页面也不会超过几分钟
DBCC SHRINKFILE 实际上在做什么,对我来说没有意义?