SQL Server:“数据收缩”详解
发布日期:2021-11-12 00:26:27 浏览次数:3 分类:技术文章

本文共 1929 字,大约阅读时间需要 6 分钟。

之前发现服务器上SQLSERVER的数据库文件达到十几个G,删除表的数据,却没有变化。于是找了下数据库文件收缩的操作,记录下来。

不过这种收缩的操作,并不能减少很大的空间,最后采用的办法是比较简单粗暴的复制表结构到新库,然后启用新库。

转载自 http://blog.csdn.net/sunroyi666/article/details/51767791

------------------------------------------------------------------------------正文--------------------------------------------------------------------

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

知行办公,专业移动办公平台 https://zx.naton.cn/
【总监】十二春秋之,3483099@qq.com
Masterzelo616701261@qq.com
【运营】运维艄公,897221533@qq.com
【产品设计】流浪猫,364994559@qq.com
【体验设计】兜兜,2435632247@qq.com
】淘码小工,492395860@qq.comiMcG33Kimcg33k@gmail.com
】人猿居士,1059604515@qq.com;思路的顿悟,1217022114@qq.com
java】首席工程师MR_Wfeixue300@qq.com
【测试】土镜问道,847071279@qq.com
【数据】fox009521,42151960@qq.com;
【安全】保密,你懂的。

转载地址:https://blog.csdn.net/fox009521/article/details/78212424 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SQLSERVER中文乱码问题
下一篇:C# MongoDB操作类

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月11日 12时33分59秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

HDU 4825 Xor Sum【01字典树/贪心】(两数最大/最小异或和) 2019-04-28
洛谷 P4551 最长异或路径【01字典树/贪心】 2019-04-28
LeetCode C++ 506. Relative Ranks【Sort】简单 2019-04-28
LeetCode C++ 105. Construct Binary Tree from Preorder and Inorder Traversal【Tree/分治】中等 2019-04-28
LeetCode C++ 106. Construct Binary Tree from Inorder and Postorder Traversal【Tree/分治】中等 2019-04-28
LeetCode C++ 504. Base 7【Math】简单 2019-04-28
LeetCode C++ 563. Binary Tree Tilt【Tree/DFS】简单 2019-04-28
LeetCode C++ 572. Subtree of Another Tree【Tree/DFS】简单 2019-04-28
LeetCode C++ 575. Distribute Candies【Greedy】简单 2019-04-28
LeetCode C++ 680. Valid Palindrome II【String】简单 2019-04-28
LeetCode C++ 700. Search in a Binary Search Tree【二叉搜索树】简单 2019-04-28
LeetCode C++ 622. Design Circular Queue【设计/循环队列】中等 2019-04-28
LeetCode C++ 641. Design Circular Deque【设计/队列】中等 2019-04-28
LeetCode C++ 645. Set Mismatch【Hash Table/Bit Manipulation/Math】简单 2019-04-28
LeetCode C++ 405. Convert a Number to Hexadecimal【位操作】简单 2019-04-28
LeetCode C++ 450. Delete Node in a BST【二叉搜索树】中等 2019-04-28
LeetCode C++ 409. Longest Palindrome【String/Hash Table】简单 2019-04-28
LeetCode C++ 67. Add Binary【String】简单 2019-04-28
LeetCode C++ 129. Sum Root to Leaf Numbers【Tree/DFS】中等 2019-04-28
LeetCode C++ 18. 4Sum【Sort/Two Pointers】中等 2019-04-28