数据库收缩:NOTRUNCATE与TRUNCATEONLY

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 原文:数据库收缩:NOTRUNCATE与TRUNCATEONLY在进行数据库收缩时,我们有2个可用选项:NOTRUNCATE,TRUNCATEONLY。这篇文章我们会详细讨论下这2个选项的具体区别。 NOTRUNCATE 当你对数据库收缩命令提供NOTRUNCATE选项时,意味着SQL Server将你数据库末尾的页移到前面,那里可以找到一些空闲的未分配空间(将释放的空间继续保留在文件中)。
原文: 数据库收缩: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需要在你的数据文件里移动页,这会带来严重的索引碎片。

感谢关注!

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
6月前
|
数据库
达梦数据库的物理备份和还原简解
达梦数据库的物理备份和还原简解
159 1
达梦数据库的物理备份和还原简解
|
1月前
|
SQL 数据库 OceanBase
OceanBase数据库的回收站功能是为了短暂保存被删除的数据库对象
【2月更文挑战第21天】OceanBase数据库的回收站功能是为了短暂保存被删除的数据库对象
18 7
|
12月前
|
存储 数据库
oushudb-数据库的备份和恢复
oushudb-数据库的备份和恢复
91 0
|
数据库
达梦数据库启用日志方法,达梦数据库查看日志是否启用,达梦数据库日志文件位置查找
达梦数据库启用日志方法,达梦数据库查看日志是否启用,达梦数据库日志文件位置查找
574 0
达梦数据库启用日志方法,达梦数据库查看日志是否启用,达梦数据库日志文件位置查找
|
SQL 存储 Oracle
HMS数据库设置和优化
Hive Metastore (HMS) 是一种服务,用于在后端 RDBMS(例如 MySQL 或 PostgreSQL)中存储与 Apache Hive 和其他服务相关的元数据。本文主要分享HMS数据库设置和优化
HMS数据库设置和优化
|
数据库 Go
收缩数据库日志
原文:收缩数据库日志 USE DATABASENAME; GO --不得已时再用这个 DUMP TRANSACTION DATABASENAME WITH NO_LOG --先截断事务日志 BACKUP LOG DATABASENAME TRUNCATE_ONLY|WITH NO_LOG|TO DISK='文件路径' --再收缩日志 DBCC SHRINKFILE (2, 7)|SHRINKFILE (DATABASENAME); --要收缩的文件的fileid,对应sysfiles中的fileid。
878 0
|
关系型数据库 数据库 MySQL