原文:数据库收缩: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需要在你的数据文件里移动页,这会带来严重的索引碎片。

感谢关注!

数据库收缩:NOTRUNCATE与TRUNCATEONLY相关推荐

  1. SQLServer数据库收缩相关知识笔记

    1.为什么要进行数据库收缩? SQL Server 数据库采取预先分配空间的方法来建立数据库的数据文件或者日志文件,比如数据文件的空间分配了300MB,而实际上只占用了20MB空间,这样就会造成磁盘存 ...

  2. SQL Server数据库收缩日志的方法

    SQL Server数据库收缩日志的方法: 方法一 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大. 1.设置数据库模式为 ...

  3. SQL数据库收缩日志

    SQL数据库收缩日志 declare @name varchar(25) declare @sql varchar(1000) declare @logid int DECLARE sdys curs ...

  4. 关于数据库收缩的几点建议

    1.数据库收缩会导致大量的索引碎片,这严重影响查询效率 2.任何时候禁用自动收缩 3.在必要的收缩之后,要处理因此而导致的索引碎片问题 收缩大数据库的建议: - Create a new filegr ...

  5. DBCC SHRINKFILE收缩日志/收缩数据库/收缩文件

    DBCC SHRINKFILE 收缩相关数据库的指定数据文件或日志文件大小. 语法 DBCC SHRINKFILE     ( { file_name | file_id }         { [  ...

  6. 数据库收缩数据文件的尝试(二)(r11笔记第9天)

    在之前自己的一个测试环境中,因为本身磁盘空间不足,导致一个测试库数据目录溢出,最后花了点功夫,将一个2G左右的文件经过收缩的操作后,竟然收缩为7M.详情可以参考 收缩关于收缩数据文件的尝试(r5笔记第 ...

  7. mysql数据库收缩

    使用过MySQL的同学,刚开始接触最多的莫过于MyISAM表引擎了,这种引擎的数据库会分别创建三个文件:表结构.表索引.表数据空间.我们可以将某个数据库目录直接迁移到其他数据库也可以正常工作. 然而当 ...

  8. SQL数据库收缩日志设置步骤(手动)

    日常使用数据库可能存在日志每天增长10G或以上,太恐怖了! ! !数据量过大导致服务器卡死,内存溢出,执行Sql过慢等问题,下面我们看具体设置的步骤.(自动收缩后续更新) 1.右键数据库-属性 2.选 ...

  9. 数据库收缩(sql2008)

    use [master] -----------修改master为你的数据库 DECLARE @dbname VARCHAR(60)SELECT @dbname = CONVERT(VARCHAR(6 ...

最新文章

  1. 分布式文件系统:HDFS
  2. 《孙子兵法》【作战第二】
  3. Docker Desktop 向大公司宣告收费,网友大呼:是时候弃用了!
  4. 计算机怎么弹出专业团队,2018年专业技术人员继续教育答案92分
  5. 第三次作业 词频统计
  6. 算法笔记_面试题_4.树的遍历(前序/中序/后续遍历)
  7. Xml序列化和反序列化对象-使用MemoryStream-实践
  8. vc++中实现进度条
  9. et200s模块接线图讲解_ET200S 模块说明
  10. 【Parallels Desktop】解决Sorry, This Application Cannot Be Run Under A Virtual Machine
  11. 统计代码放在网站php,网站添加简单访客统计代码
  12. 北方工商管理研修学院计算机,北方工商管理研修学院 你骗了多少人
  13. 骁龙780G和麒麟990哪个好
  14. LPMS-CU2 IMU在 Nvidia Xavier安装配置
  15. window.location.href跳转到的页面,获取值
  16. SWUST OJ 1012: 哈希表(链地址法处理冲突)
  17. foxmail客户单发送html活动页面(含链接跳转)邮件(发送 转发)
  18. 【PyTorch】4 姓氏分类RNN实战(Simple RNN)——18 种起源语言的数千种姓氏分类
  19. Cannot read properties of undefined (reading ‘extraneous‘) npm install时
  20. android更新软件,Android软件的自动更新

热门文章

  1. 目录忽略_宣传册设计中目录的构思方法和运用
  2. gitlab提交合并_notification - 如何把gitlab项目中的提交、PUSH、合并请求的通知发送到邮箱...
  3. mysql-5.7.21-winx64_MySql-5.7.17 -winx64的安装配置
  4. 使用C++实现Socket编程传输文件
  5. 最小环算法求解(Dijkstra算法+Floyd算法)
  6. 关于学习Python的一点学习总结(57->正则表达式及re模块中的一些函数)
  7. weex css单位,weex 踩坑
  8. mysql desc指令_MySQL Desc指令相关
  9. python里感叹号什么意思_仪表盘上的感叹号是什么意思
  10. ev3pid巡线_PID算法巡线