SQL Server:“数据收缩”详解

  • 1. 数据库的相关属性
  • 2. 为何数据库需要收缩?
  • 3. 如何收缩数据库?

1. 数据库的相关属性

在MS中创建数据库时会为数据库分配初始的大小(如下图:数据库和日志两个文件),随着数据库的使用文件会逐渐增大。数据库文件大小的增加有两种方式:

  • 自动增长:在自动增长中可以设置每次的增长量,以及最大增长的文件大小。
  • 手动增长:取消“启用自动增长”则为手动增长,这就需要DBA经常观测数据库的运行情况,及时更改数据库的小。手动增长比较麻烦,一般都设为自动增长。

2. 为何数据库需要收缩?

要明白为何数据库需要收缩,首先需要理解两个概念:

  • 为数据库分配的空间:如上图初始时为“数据库文件”分配的空间为3MB,为“日志文件”分配的空间未1MB。
  • 数据库实际使用的空间:以上图为例,由于数据是刚创建的,里面没有任何用户数据,因此它实际使用的空间很小(不足1MB)。

由此可以理解为:分配空间>=使用空间。在实际使用的过程中可能会出现分配空间为100MB,而使用空间仅为20MB,这就造成了磁盘有80MB的浪费,为了消除这种浪费就需要使用“数据收缩”功能。

3. 如何收缩数据库?

3.1 通过设置数据库选项AUTO_SHRINK为True,即让数据库自动收缩,如下图:

3.2 收缩数据库文件

右键数据库—任务—收缩—文件,如下图:

文件类型:选择所要收缩的是“数据库文件”还是“日志文件”。

当前分配的空间:数据库为该文件分配的大小,就是在磁盘上看到的文件大小。

可用空间:就是“当前分配的空间” 减去“实际使用的空间”。

收缩操作:
   ① 释放未使用的空间:将该文件中未使用的空间释放出来,数据在文件中不移动;
   ② 在释放未使用的空间前重新组织页:此选项可以将文件收缩到“指定大小”,并将数据重新组织。其最小值为数据库“实际使用的空间”;
   ③ 通过将数据迁移到同一文件组的其他文件来清空文件:不解释,很少用。

上述操作也可以使用T-SQL替代:

DBCC ShrinkFile(‘数据库名’,  targetsize);           /* 收缩数据库文件 */
DBCC ShrinkFile(‘数据库名_log’,  targetsize);       /* 收缩日志文件 */

Targetsize:单位为兆,必须为整数,DBCC SHRINKFILE 尝试将文件收缩到指定大小。

DBCC SHRINKFILE 不会将文件收缩到小于“实际使用的空间”大小,例如“分配空间”为10M,“实际使用空间”为6M,当制定targetsize为1时,则将该文件收缩到6M,不会将文件收缩到1M。

3.3 收缩数据库

即同时收缩“数据库文件”和“日志文件”,右键数据库—任务—收缩—数据库

收缩后的最大可用空间:设为0,即收缩所有的可用空间。

也可以使用T-SQL完成数据库的收缩:

DBCC SHRINKDATABASE(数据库名,百分比)

百分比:即“收缩后文件中的最大可用空间”,取值范围“大于等于0, 小于100%”,实际使用中设为0即可。

SQL Server:“数据收缩”详解相关推荐

  1. mysql 数据库怎么收缩_SQL Server -- 数据收缩详解

    1. 数据库的相关属性 在MS中创建数据库时会为数据库分配初始的大小(如下图:数据库和日志两个文件),随着数据库的使用文件会逐渐增大.数据库文件大小的增加有两种方式: 自动增长:在自动增长中可以设置每 ...

  2. MS SQL Server 数据库连接字符串详解

    MS SQL Server 数据库连接字符串详解 问题 : 超时时间已到.在从池中获取连接之前超时时间已过.出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小. 解决办法 1. 在代码里面 ...

  3. SQL Server:触发器详解

    SQL Server:触发器详解 1. 概述 2. 触发器的分类 3. Inserted和Deleted表 4. 触发器的执行过程 5. 创建触发器 6. 修改触发器: 7. 删除触发器: 8. 查看 ...

  4. mysql coalesce函数用法,SQL Server COALESCE函数详解及实例

    SQL Server COALESCE函数详解 很多人知道ISNULL函数,但是很少人知道Coalesce函数,人们会无意中使用到Coalesce函数,并且发现它比ISNULL更加强大,其实到目前为止 ...

  5. Sql Server之数据类型详解

      数据类型是一种属性,用于指定对象可保存的数据的类型,SQL Server中支持多种数据类型,包括字符类型.数值类型以及日期类型等.数据类型相当于一个容器,容器的大小决定了装的东西的多少,将数据分为 ...

  6. sql server 存储过程的详解

    SqlServer存储过程详解 1.创建存储过程的基本语法模板: if (exists (select * from sys.objects where name = 'pro_name'))drop ...

  7. Java调用SQL Server的存储过程详解

    本文较长,包含了如下几部分 使用不带参数的存储过程 使用带有输入参数的存储过程 使用带有输出参数的存储过程 使用带有返回状态的存储过程 使用带有更新计数的存储过程 1使用不带参数的存储过程 使用 JD ...

  8. win10 SQL SERVER 2017安装详解

    目录 SQL Server 2017安装 SSMS安装 写在之前 安装的sql程序包是cn_sql_server_2017_developer_x64_dvd_11296175 在安装之前最好是安装了 ...

  9. java调用数据库存储过程_Java调用SQL Server的存储过程详解

    1使用不带参数的存储过程 1 {call procedure-name} 作为实例,在 SQL Server 2005 AdventureWorks 示例数据库中创建以下存储过程: CREATE PR ...

最新文章

  1. 你可以恢复模糊的图像吗?
  2. iOS使用AVCaptureSession自定义相机
  3. 【若依(ruoyi)】弹框图标 / layer 图标
  4. php 303,HTTP 的重定向301,302,303,307(转)
  5. ip变换器苹果系统_加密锁能为高铁做什么?铁路电力变换器系统告诉您
  6. Linux 内核的同步机制,第 2 部分(来自IBM)
  7. jsf面试题_JSF面试问答
  8. 没关系,因为你是好人呀
  9. GitHub客户端使用
  10. 打砖块 如何实现三个球 java_小球弹砖块游戏(JAVA)
  11. 聊聊量子计算机那些事
  12. 腾讯云cdn设置 php,腾讯云CDN开启中间源导致wordpress后台无法访问的最终解决办法...
  13. 幻14 连不上无线网 网卡掉驱动
  14. AppleID忘记密保问题,同时未开启双重认证,需要签署新的协议才能进行下载或者开发的情况处理
  15. python2.7运行报警告:UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode
  16. Python 读取xlsx表格
  17. 针对AirPods连接安卓手机时声音很小的解决方法
  18. Bash 中的字符串变量
  19. Hadoop3.2.1 【 YARN 】源码分析 : ContainerManager浅析
  20. css宽度为自适应,高度等于宽度

热门文章

  1. 加速文件传输协议如何工作?
  2. EasyX简单绘图快速入门
  3. win10 SystemParametersInfo 设置屏保 不好使_火爆抖音的电子时钟罗盘屏保(老铁,安排上)!...
  4. win10鼠标灵敏度怎么调_刺激战场:吃鸡灵敏度怎么调最科学?大神主播手把手教学诀窍!...
  5. 苹果ios开发一年的工作笔记
  6. 生气了 说说腾讯游戏
  7. 利润表模板excel_EXCEL要吗?利润表模板
  8. Android 代码实现打开USB调试?
  9. eclipse怎么编写java程序_简单使用Eclipse编写第一个Java程序
  10. labview2019百度网盘安装(内附教程)