数据库收缩:NOTRUNCATE与TRUNCATEONLY
在进行数据库收缩时,我们有2个可用选项:NOTRUNCATE,TRUNCATEONLY。这篇文章我们会详细讨论下这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/
数据库收缩:NOTRUNCATE与TRUNCATEONLY的更多相关文章
- DBCC SHRINKFILE收缩日志/收缩数据库/收缩文件
DBCC SHRINKFILE 收缩相关数据库的指定数据文件或日志文件大小. 语法 DBCC SHRINKFILE ( { file_name | file_id } { [ ,t ...
- Sql数据库收缩 语句特别快
数据库在收缩的时候..使用菜单 >> 任务 >> 收缩 >> 文件 >> 数据, 特别慢..还会报错失败.. 但使用脚本 USE [dbName] G ...
- sql数据库收缩
回收步骤: 1.查看日志文件大小[一般回收比较大的] --适用于RDS For SQL Server2012\2016 SELECT DB_NAME(database_id) AS [Database ...
- access数据库收缩(压缩)
一般是因为表中有大量没用的数据,把没用的数据全部删除 菜单栏的“工具”——“数据库实用工具”——“压缩和修复数据库” OK啦
- SQL SERVER运维日记--收缩数据库
一个小故事 某天,小王正在和HR妹妹闲聊,正HAPPY时,,突然收到系统告警消息,数据库磁盘被剩余空间500M,OMG,不行,磁盘快满了,要是业务要停了,,那就小王只能删库到跑路了,,, 先检查下,有 ...
- SQL 2008 R2数据库变为REPLICATION,日志不断增长并且不能截断和收缩的解决方式
执行环境:windows server2003,sql server2008 R2,数据库上布置CDC 用户反应系统报错是日志已满,系统不能执行. 查看日志文件时.发现日志文件已经达到15G ...
- 收缩数据库 DBCC SHRINKFILE
/* from: http://www.cnblogs.com/blackcore/archive/2010/12/27/1917911.html */ 数据库中的每个文件都可以通过删除未使用的页的方 ...
- SqlServer 在创建数据库时候指定的初始数据库大小是不能被收缩的
当你在SqlServer创建数据库的时候可以指定数据库文件的初始大小,比如下图中我们将新创建的数据库MyDB的大小设置成了1024MB 那么你建好的数据库的确也就会占用1024MB左右的磁盘空间 不过 ...
- SQL server2005学习笔记(一)数据库的基本知识、基本操作(分离、脱机、收缩、备份、还原、附加)和基本语法
在软件测试中,数据库是必备知识,假期闲里偷忙,整理了一点学习笔记,共同探讨. 阅读目录 基本知识 数据库发展史 数据库名词 SQL组成 基本操作 登录数据库操作 数据库远程连接操作 数据库分离操作 数 ...
随机推荐
- Andorid--java0
java code: public class Hello{ public static void main(String argv[]) { System.out.printl ...
- .NET中的流
当应用程序需要和磁盘上的文件打交道的时候,就有了流的概念.流就像架设在应用程序所在内存和磁盘之间的一个管道. 大致思路 → 建立管道 //FileMode.Open打开现有文件,另外还有FileMod ...
- IE8以下版本iframe出现滚动条和内容空白问题
在网页中使用iframe引用了第三方的页面 $("#tianqi").html('<iframesrc="http://i.tianqi.com/index.php ...
- Android 使用java.net.socket 的接收问题
// 初始化socketsocket = new Socket(InetAddress.getByName(sip), sport);InputStream sin = socket.getInput ...
- ASP.NET 4.5 和 Visual Studio 2012 中的新功能
原文地址:http://www.asp.net/aspnet/overview/aspnet-and-visual-studio-2012/whats-new#_Toc318097372
- Jquery+artTemplate+layPage 封装datagrid
导言 在日常开发中经常会用到列表,相信用过easyui,Ext等很多,的确很强大,但想修改确实也不容易,我也用了几年的easyui,有时间时会想一下,自已随然没有前端的精湛技术,但可以在有这些技术的开 ...
- BCB6 重装后的项目编译莫名问题
我很少用 bcb ,重装 bcb6 后原来的项目居然不能编译成功了,看了一下是控件的问题,但很多控件实际上并不关联的,而 bcb 坚持要你"拥有"当时的控件环境,折腾很久实在是没发 ...
- Centos 6.5 下安装socket5代理
---恢复内容开始--- 1. 安装 先安装依赖库 yum -y install gcc gcc-c++ automake make pam-devel openldap-devel cyrus-sa ...
- 关于imp无法导出空表
前天在业务库中导出完整库时,再导入到新库时发现部分表丢失. 看日志后分析是部分空表没有导出.查google知,11G中新特性,当表无数据时,不分配segment,以节省空间.而使用exp命令时,无Se ...
- 10大经典CSS3菜单应用欣赏
很多时候,我们的网页菜单需要个性化,从而来适应各种行业的用户视觉操作体验.本文将带领大家一起来欣赏10个非常经典的CSS3菜单应用,菜单涉及到动画菜单.Tab菜单.面包屑菜单等. 1.CSS3飘带状3 ...