释放方法:
我们提供的服务有:做网站、成都网站制作、微信公众号开发、网站优化、网站认证、梅县ssl等。为数千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的梅县网站制作公司
1.打开sqlserver管理工具,选中需要操作的数据库——右键——任务——分离;
勾选删除链接(如果有链接连着数据库会导致分离失败)然后点击确定
2.这时候你会发现你的数据库不见了,不要着急,一会儿就弄回来,先去我的电脑-文件管理 把万恶之源 ldf文件删除了
3.然后回到管理工具 附加上刚才分离的库文件 一般是 ndf 或者mdf后缀的
4.选择后下面会有两个文件 如果你删了ldf 会提示日志文件找不到 把那一项删了 点确定就是 再去删一遍日志文件 我就不截图了
附加完毕是不是发现 我的数据库又回来了 整个过程都不需要重启数据库
如果想要直接释放也可以,但是前提是你需要知道文件的名字,直接执行语句
DBCC SHRINKFILE(‘FileName’, 1 , TRUNCATEONLY )
也可以直接释放。
具体函数 DBCC SHRINKFILE的参数定义,大家可以自己在网上查询。
有以下处理方法:
方法1:修改数据文件的扩展性
1
alter database datafile '文件路径' autoextend on next 100m maxsize 4000M;
方法2:给表空间增加新的数据文件
1
alter tablespace 表空间名 add datafile '数据文件路径‘ size 1000m autoextend on next 100m maxsize 4000M;
Sql Server 区管理(GAM,SGAM)
大家都知道Sql Server 中数据文件存储的最小单位是页面(Page),但实际SQLSERVE并不是以页面为单位给数据分配空间的,Sql Server默认的存储分配单位是盘区(Extend)。这样做的主要原因是为了避免频繁的读写IO,提升性能。在表或其它对象分配存储空间,不是直接分配一个8K的页面,而是以一个盘区(Extend)为存储分配单位,一个盘区为8个页面(Size = 8*8K=64K)。
这样,对区得操作就会非常频繁,也要求Sql Server有自己的一套系统管理着数量众多的区。其中最突出的出一个问题,那就是在存储那些只有少量数据,不足8K的对象,如果也是分配给一个盘区,就会存在存储空间上的浪费,降低了空间分配效率。
为解决上述问题,SQLSERVER提供了一种解决方案,定义了两种盘区类型,统一盘区和混合盘区。
全局分配映射表 (GAM) :统一盘区,GAM 页记录已分配的区。每个 GAM 包含 64,000 个区,相当于近 4 GB 的数据。GAM 用一个位来表示所涵盖区间内的每个区的状态。如果位为 1,则区可用;如果位为 0,则区已分配。
共享全局分配映射表 (SGAM) :由多个对象共同拥有该盘区,SGAM 页记录当前用作混合区且至少有一个未使用的页的区。每个 SGAM 包含 64,000 个区,相当于近 4 GB 的数据。SGAM 用一个位来表示所涵盖区间内的每个区的状态。如果位为 1,则区正用作混合区且有可用页。如果位为 0,则区未用作混合区,或者虽然用作混合区但其所有页均在使用中。
在实际为对象分配存储盘区时,为了提高空间利用率,默认的情况下,如果一个对象一开始大小小于8个页面,就尽量放在混合盘区中,如果该对象大小增加到8个页面后,SQLSERVER会为这个对象重新分配一个统一盘区。
据区当前的使用情况,GAM 和 SGAM 中每个区具有以下位模式:
这将简化区管理算法。若要分配统一区,数据库引擎将在 GAM 中搜索为 1 的位,并将其设置为 0。若要查找具有可用页的混合区,数据库引擎将在 SGAM 中搜索为 1 的位。若要分配混合区,数据库引擎将在 GAM 中搜索为 1 的位,将其设置为 0,然后将 SGAM 中对应的位设置为 1。若要释放区,数据库引擎确保将 GAM 位设置为 1,将 SGAM 位设置为 0。实际上,数据库引擎内部使用的算法比本主题中介绍的更为复杂,因为数据库引擎在数据库中均匀分布数据。但是,由于无需管理区分配信息链,因此即使是实际算法也会被简化。
管理Sql Server可用空间
首先摘录段 MSDN 的一段官方解释:
页可用空间 (PFS) 页记录每页的分配状态,是否已分配单个页以及每页的可用空间量。PFS 对每页都有一个字节,记录该页是否已分配。如果已分配,则记录该页是为空、已满 1% 到 50%、已满 51% 到 80%、已满 81% 到 95% 还是已满 96% 到 100%。
将区分配给对象后,数据库引擎将使用 PFS 页来记录区中的哪些页已分配或哪些页可用。数据库引擎必须分配新页时,将使用此信息。保留的页中的可用空间量仅用于堆和 Text/Image 页。数据库引擎必须找到一个具有可用空间的页来保存新插入的行时,使用此信息。索引不要求跟踪页的可用空间,因为插入新行的点是由索引键值设置的。
在数据文件中,PFS 页是文件头页之后的第一页(页码为 1)。接着是 GAM 页(页码为 2),然后是 SGAM 页(页码为 3)。第一个 PFS 页之后是一个大小大约为 8,000 页的 PFS 页。在第 2 页的第一个 GAM 页之后还有另一个 GAM 页(包含 64,000 个区),在第 3 页的第一个 SGAM 页之后也有另一个 SGAM 页(包含 64,000 个区)。下图显示了数据库引擎用来分配和管理区的页顺序。
看过之后,让人一头雾水,真是不知所云,真佩服这些 MSDN 是如何翻译的,看来中文 MSDN 太不靠谱,最后没办法,只能google了
其实上面说的意思就是:Sql Server 管理可用空间的方法是,查找每个每个页面是否使用,以及使用情况情况。这时就需要一个页面来记录各个页面的使用情况了,这就是 PFS 页。
PFS(Page Free Space),也叫页面自由空间,该页面用来跟踪一个文件中每一个特定的页面的利用率情况。一个文件中第二个页面(页码1)就是PFS页面,该页面的每个字节都记录了相应页面的分配情况、页面类型、是否IAM页、是否包含删除记录、以及空间利用率信息;PFS能够管理和跟踪8088个页面的使用情况,即接近64M的空间,以后每8088个页面将再出现一次。
让我们首先了解一下PFS的页面管理字节的构造,管理单位为字节,每字节管理一个页面。
第0个bit为保留字节,始终为0
第1个bit表示该页面是否已分配,我们知道GAM页用来管理区是否已分配,但一个区包含8个页面,所以用该bit用来准确定位该区的某个页面是否已分配出去了。
第2个bit表示该页面是否混合分区的一个页面。
第3个bit表示该页面是否是一个IAM(索引分配映射)页面。
第4个bit表示该页面中是否包含幻影或已删除记录,这有助于SQL Server定期清理幻影或已删除记录。
第5~7个页面表示该页面的空间使用率情况。
sqlserver数据文件太大,表占用空间太大,怎么释放空间
ms
sqlserver
自带收缩功能
可以试下
表占用空间大不一定能收缩多少
毕竟有数据在那,如果这表经常有删除动作的话
收缩还是有用的,
在程序组中,展开“Sqlserver”运行“查询分析器”。输入用户名、密码。
在工具栏的数据库列表中选择要操作的数据库。
输入:select * from sysfiles 执行,可以看到下面的内容,记住其中的fileid字段的内容,也就是1或2,标识数据库的数据文件或日志文件,下面的命令要用到这里的值。
输入:dbcc shrinkdatabase(' 库名' ),收缩数据库,结果如下:可以看到压缩后的数据库文件的尺寸。
输入:dbcc shrinkfile(2, 0)执行,然后输入dbcc shrinkfile(1, 0)执行。两句命令中的第一个参数就是前面看到的FileID的值,表示了一个是日志文件,一个是数据文件。第二个参数0,表示收缩到初始大小。
输入:dbcc updateusage (0),执行更新操作,完工!更新后可以跟之前的数据文件比对一下了,会有相对较大的尺寸上的优化了。