首页 > 数据库 >sql server 数据库收缩

sql server 数据库收缩

时间:2023-01-31 19:44:07浏览次数:47  
标签:文件 收缩 数据库 使用 server sql 空间 分配

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即可。

 

标签:文件,收缩,数据库,使用,server,sql,空间,分配
From: https://www.cnblogs.com/lgx5/p/17080302.html

相关文章

  • sql生成连续日期(年份、月份、日期)
    1--=============================================2--Author:<Author,Jearay>3--Createdate:<CreateDate,2022/8/15>4--Description:......
  • Windows Server 2022 中文版、英文版下载 (updated Jan 2023)
    WindowsServer2022正式版,2023年1月更新,持续更新中...请访问原文链接:https://sysin.org/blog/windows-server-2022/,查看最新版。原创作品,转载请保留出处。作者主页......
  • sqlserver 数据库备份
    目标:实现数据库定时备份和删除效果图如下1.数据备份declare@filenamevarchar(255)select@filename='E:\MES-BAK\MES'+left(replace(replace(REPLACE(convert(varc......
  • MySQL------8.0新特性:公用表表达式
    公用表表达式(或通用表表达式)简称为CTE(CommonTableExpressions)。CTE是一个命名的临时结果集,作用范围是当前语句。CTE可以理解成一个可以复用的子查询,当然跟子查询还是有点......
  • MySQL查询不区分大小写的问题总结
    MySQL查询不区分大小写问题1.问题描述最近,笔者在开发FleaAuth模块的过程中,准备验证以注册的账号huazie进行登录的场景,结果以HUAZIE成功登录,而数据库中存储的账号是hua......
  • tk4 安装mysql8
    sudoyuminstallmysql-serverservicemysqldrestartgrep"temporarypassword"/var/log/mysqld.log  --查看临时密码mysql-uroot-pupdateusersetauthent......
  • MySQL------数据类型重点关注
    整数类型整数类型字节有符号数取值范围无符号数取值范围TINYINT1-128~1270~255SMALLINT2-32768~327670~65535MEDIUMINT3-8388608~......
  • SqlServer2012 AlwaysOn部署
    一环境准备1软件准备(1)SQLServer2012企业版(2)WindowsServer20122IP准备IP作用172.16.100.115域服务器IP172.16.100.117数据库服务器IP172.16.100.118数据库服务器IP......
  • Python连接数据库
    1、首先确认本地使用的是Python2还是Python3,它们的mysql插件分别如下:Python2--->MySQLdbPython3 ---> PyMySQL 2、我本地是Python3故需要安装PyMySQL。进入File->......
  • PGSQL新建临时表
    初始化临时表,会话结束后自动删除普通写法CREATETEMPTABLEtmp_student(idVARCHAR(10),nameVARCHAR(3O),......