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

sql server 数据库收缩

时间:2024-10-18 12:00:54浏览次数:1  
标签:文件 收缩 数据库 使用 server sql 空间 分配

原文链接:https://www.cnblogs.com/lgx5/p/17080302.html

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/Dongmy/p/18473975

相关文章

  • MySQL主从数据不一致问题处理
    分析问题网络延迟mysql主从复制默认的是异步复制,通过网络传输binlog日志文件,可能你从库在设计之初就是跨机房或者网络故障,导致binlog传输出现延迟或故障,从而导致不同步或不一致。服务器负载如果其中某一台服务器负载太高或者磁盘占用100%,涉及msyql主从复制的3个线程可能会......
  • 高效数据移动指南 | 如何快速实现数据库 Oracle 到 Apache Doris 的数据同步?
    在现代企业中,数据无处不在,贯穿于各个业务环节和系统之间。无论是跨系统的数据集成、多地域的数据协同,还是实时应用的数据同步,数据的一致性和及时性都至关重要。在数字化转型的过程中,如何确保不同系统、地域、设备之间的数据同步,成为了企业面临的重要挑战。本专题将基于实践经验,从......
  • 数据库中时间戳求差值
    在MySQL中,如果你有两个`TIMESTAMP`或`DATETIME`类型的数据,并希望计算它们之间的差值,可以使用几种方法来实现。以下是几种常见的方法: ###方法1:使用`TIMEDIFF()`函数`TIMEDIFF()`函数返回两个时间点之间的差异,结果是一个时间间隔(例如:`00:01:23`表示1分钟23秒)。......
  • 分段处理海量数据SQL
    在DB2中,你可以使用`ROW_NUMBER()`窗口函数来为表中的每一行分配一个唯一的序号。然后,基于这个序号,你可以将数据划分成指定数量的组,并确定每组的上边界和下边界。假设你的表名为`my_table`并且它有一个唯一索引列叫做`id`。你想把1000条记录分成10组,那么每组应该包含100条记......
  • 开源免费数据库监控工具,MySQL、Oracle、Postgres或MSSQL
    在信息系统项目中,UI、业务逻辑、数据库操作、文件操作、网络、API调用等许多环节都有可能产生性能问题,其中,数据库读写是最为常见的操作,我们也发现其实许多项目中的大部分瓶颈多来自于数据库操作。因此,在做性能优化的过程中,我们总是特别关注持久层的代码、数据库的设计和数据库的物......
  • MyBatis在SQL语句中取list的大小
    需求:使用MyBatis进行开发时,在一个SQL语句中需要拼接list的大小。大家都知道,当我们在MyBatis中写SQL时,如果需要遍历list,先对list进行非空判断的时候,可以加下面这行:<iftest="null!=listandlist.size!=0">SQL</if>但是如果想在SQL中取到list.size的值,则比较麻烦。一般会想......
  • 【软件资料】数据库设计规范,数据库设计说明书,数据库设计规范,数据库文档(Word资料下载)
     1编写目的2数据库策略2.1数据库对象长度策略2.2数据完整性策略2.3规范化设计与性能之间的权衡策略2.4字段类型的定义与使用策略3命名规范3.1数据库命名规则3.2数据库对象命名的一般原则3.3表空间(Tablespace)命名规则3.4表(Table)命名规则3.5字段命......
  • 在centos7上安装mysql5.7
    1、此处是在MySQL官网获取的rpm包(也可直接在linux中使用yum获取这个rpm包到本地)   在MySQL官方网站的最底下找到这个此处选择的MySQL版本5.7.44,操作系统选Oracle Linux,OS版本选择linux7下载将下载好的二进制文件包上传到centos7中在windows系统中上传文件到虚拟机里......
  • 数据库系统原理——第三章 关系数据库标准语言SQL
    @目录1.SQL的特点2.SQL的组成3SQL语句3.1数据库的基本操作3.2基本表的定义、修改、删除3.3索引的建立与删除3.4数据更新3.5数据查询3.5.1单表查询3.5.2连接查询3.5.2.1内连接(INNERJOIN)3.5.2.2左连接(LEFTJOIN)3.5.2.3右连接(RIGHTJOIN)3.5.2.4全连接(FULLJOIN)3.5.3嵌套查询3.5.4集......
  • sql-function
    在SQLite中,除了LENGTH函数,还有许多其他内置函数,分类如下:字符串函数UPPER(string):将字符串转换为大写。LOWER(string):将字符串转换为小写。SUBSTR(string,start,length):返回从指定位置开始的子字符串。TRIM(string):删除字符串两端的空白字符。REPLACE(string,old......