数据库收缩:NOTRUNCATE与TRUNCATEONLY

在进行数据库收缩时,我们有2个可用选项:NOTRUNCATETRUNCATEONLY。这篇文章我们会详细讨论下这2个选项的具体区别。

NOTRUNCATE

当你对数据库收缩命令提供NOTRUNCATE选项时,意味着SQL Server将你数据库末尾的页移到前面,那里可以找到一些空闲的未分配空间(将释放的空间继续保留在文件中)。唯一的区别是数据文件本身不会收缩。

这就是说在数据库末尾的未使用空间还是没有重声明回给文件系统。用NOTRUNCATE选项进行数据收缩后,最后在你数据文件的末尾会有一些空的可用空间——当然会带来索引碎片。

TRUNCATEONLY

当你用TRUNCATEONLY参数执行数据库收缩命令时,SQL Server从末尾到开始,只要在文件末尾有空的可用空间,就会把数据文件清理掉。使用这个选项SQL Server在数据文件里不会移动任何页。你本人必须确认在你的数据文件末尾会有一些可用空间,这样TRUNCATEONLY会为你申明一些空间。

如果你已经仔细阅读了这点,现在你应该能想象当你进行常规的数据库收缩,不使用这些选项时,SQL Server内部会发生什么:

  • 第1步SQL Server使用NOTRUNCATE选项进行数据库收缩操作来在你的数据文件末尾获得一些可用空间。在你的操作系统里,你的文件物理大小没有发生改变。这一步会带来一些索引碎片。
  • 第2步SQL Server使用TRUNCATEONLY选项进行数据库收缩操作,最后在数据文件末尾移除未分配的区。在操作系统里,这也会把文件的物理大小收缩。

小结

数据库收缩命令提供的任何选项都与你无关:因为从不推荐进行数据库收缩!如果你知道在你数据文件末尾有未分配的空间,你不想要这些的话,使用TRUNCATEONLY选项进行数据库收缩更安全,因为你不会引入索引碎片。但一旦你使用了NOTRUNCATE选项,SQL Server需要在你的数据文件里移动页,这会带来严重的索引碎片。

感谢关注!

参考文章:

https://www.sqlpassion.at/archive/2014/08/18/database-shrink-notruncate-vs-truncateonly-2/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值