在我们日常适用数据库时只要有增删改查的操作就会被记录到SQL server的日志中,随着时间的推移日志文件会越来越大,如果不定期处理可能会撑满磁盘导致一些不可想象的后果。在加上我们业务系统中的数据及业务日志每天都在产生,磁盘占用也会越来越高,那么有没有什么方案来清理一下数据库来做个瘦身呢?接下来一起看一下sqlserver中收缩功能
官方文档介绍
官方文档地址: 收缩文件
官方是这样解释的:收缩数据文件通过将数据页从文件末尾移动到更靠近文件开头的未占用的空间来恢复空间。 在文件末尾创建足够的可用空间后,可以取消对文件末尾的数据页的分配并将它们返回给文件系统。
在执行会产生大量未用存储空间的操作(如大型 DELETE 语句、截断表或删除表操作)后,执行收缩操作最有效。
大多数数据库都需要一些可用空间,以供常规日常操作使用。 如果反复收缩数据库文件并注意到数据库大小再次变大,则表明常规操作需要可用空间。 在这种情况下,反复收缩数据库文件是一种无谓的操作。 增加数据库文件所需的自动增长事件会影响性能。
被移动用来收缩文件的数据可以分布到文件的任何可用位置。 这将导致索引碎片并使搜索索引范围的查询变慢。 若要消除碎片,请考虑在收缩后重新生成文件的索引。
除非有特定要求,否则不要将 AUTO_SHRINK 数据库选项设置为 ON。
分析
我们在创建数据库时会为数据库分配初始的大小,随着数据库的使用文件会逐渐增大。数据库文件大小的增加有两种方式:1.自动 2.手动
如图所示初始时为“数据库”分配的空间为8MB,为“日志”分配的空间为8MB。
以此图为例,由于数据库是刚创建的,里面没有任何数据,因此它实际使用的空间很小可能还为达到8MB。
根据分析我们可以得出:分配空间大于使用空间。在实际使用的过程中可能会出现分配空间为80MB,而使用空间仅为20MB,这就造成了磁盘有60MB的浪费,为了消除这种浪费就需要使用“收缩”功能。
实操
1.我们可以在创建数据后设置数据库自动进行收缩
选中数据库右键——属性——选项——找到自动收缩(默认是关闭的)
2.如果已经产生大量数据,那么我们可以先进行改变数据库的恢复模式为"简单"
再去选择数据库右键——任务——收缩
在这里有两个选项一个是数据库一个是文件
数据库:针对整体数据库包含 数据、日志进行收缩
文件:可自行选择对数据或日志进行收缩
①数据库
如果勾选了“在释放未适用的空间前重新组织文件。选中此选项可能会影响性能®”,那么数据库将文件收缩到“指定大小”,并将数据重新组织。
如果不勾选 那么将该文件中未使用的空间释放出来,数据在文件中不移动
建议不勾选
点击确定后会被收缩,磁盘占用就会变小
②文件
文件类型:选择所要收缩的是“数据库文件”还是“日志文件”。
当前分配的空间:数据库为该文件分配的大小,就是在磁盘上看到的文件大小。
可用空间:就是“当前分配的空间” 减去“实际使用的空间”。
收缩操作:
释放未使用的空间:将该文件中未使用的空间释放出来,数据在文件中不移动;
在释放未使用的空间前重新组织页:此选项可以将文件收缩到“指定大小”,并将数据重新组织。其最小值为数据库“实际使用的空间”;
通过将数据迁移到同一文件组的其他文件来清空文件:几乎不用。
至此结束。