user database的initial size和dbcc shrinkfile
之前我们讨论了dbcc shrinkfile改变tempdb initial size的情况。而用DBCC Shrinkfile去收缩一个user database,情况就比较简单了。让我们通过一些测试来说明SQL Server 收缩user database的行为。
首先创建了一个数据库,Sales_data的初始大小为3mb。 对于当前这个数据库文件来说,它的initial size为3mb。
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008RTM\MSSQL\DATA\saledat.mdf',
SIZE = 3,
FILEGROWTH = 1 )
LOG ON
( NAME = Sales_log,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008RTM\MSSQL\DATA\salelog.ldf',
SIZE = 5MB
) ;
现在我们插入一些10mb数据:
select top 1280 REPLICATE('a',8000)as x into a from sys.columns c1 ,sys.columns c2
Sales_data大小变成了13mb的左右,然后执行dbcc shrinkfile来收缩数据文件,注意这里我们没有指定要收缩到的target size:
我发现sales_data的大小变成了3mb。
结论:当数据库实际使用的空间小于Minimum size时,在不指定 target size的情况下,dbcc shrinkfile可以将文件收缩到Minimum Size。(实际上在这个测试中的MinimumSize就是我们数据库的initial size。)
那么我们来看看dbcc shrinkfile能否改变user database的Minimum size? 继续下一个实验。
执行下面的脚本,先将数据库从3M变为13MB,然后使用dbcc shrink并指定target size为10MB。
收缩之后sales_dat变成了11mb,但Minimum size仍然是之前的3mb。 那么是否说明dbcc shrinkfile无法改变user database的Minimum size? ? ?
继续进行试验:现在我们给dbcc shrinkfile命令指定target size为1MB。
试验结果是,数据库的当前大小变为1.3mb, 而且MinimumSize也变成1.3mb。
我们再次插入数据扩张数据库大小,之后再次使用dbcc shrinkfile收缩(不指定target size)。
如我们所料,这次数据库就被收缩到了1.3mb。
结论:如果数据库收缩后的大小仍然大于minimum size,那么minimum size不会改变。 如果收缩后数据大小小于当前的minimum size,那么minimum size变更为当前大小。
虽然dbcc shrinkfile可以返回minimum size,但是使用这种办法来查看minimum size显然不是个好主意。还有其他方法查看Minimum size吗?
答案是肯定的:
可以通过dbcc
fileheader得到文件的Minimum size, 请参考MinSize列。
Minimum size的值实际存储在数据文件的第0页中,所以我们通过dbcc page也能查看到
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2008-10-10 impersonate c#