日期:2014-05-17  浏览次数:20667 次

关于SQL2000数据库 未使用空间很大的问题
OS:WINDOWS2003
DB:Sql2000 +sp4
服务器:IBM 志强3.0 4G内存  应怕147G*2块 
(第一次做系统做了 RAD0,后来做了一次系统 不知道是否做了RAD0)

问题描述:
    最开始的时候数据库增长速度正常。自从服务器从做过一次操作系统后(前后操作系统都为WINDWS2003),数据库的增长速度明显增长过快,以前一天的增长就是几MB 或者10几MB ,现在基本每天150多MB的增长速度。
目前数据库文件有37GB多 日志文件1mb ,数据库设置了每周自动收缩。但是没什么效果。
现在在数据库上右键-》所有任务-》收缩数据库 选择数据文件 显示的最小收缩值和当前数据库大小值相同。
通过分析数据库表的空间占压情况如下
表名  记录数 保留空间 使用空间 索引空间 未用空间
a 97034 3960344 494704 7696 3457944
b 193762 9356352 1170776 13848 8171728
c 280964 6612392 826144 13448 5772800
d 294601 74176 40752 14176 19248
e 365723 1128400 215040 54384 858976
f 682855 6700312 951384 62472 5686456
...
表总合计 2646832 37946840 5034760 194520 32717560
看到数据使用大小仅5G多尔未用空间就占用了32.7G

现在硬盘空间即将用满了   如何将32.7G 空间释放出来呢? 

------解决方案--------------------
DBCC SHOWCONTIG(B)
查看一下这些表的空间情况及碎片情况
收缩了没反应么?>
------解决方案--------------------
UNUSED占用大量空间的原因是表中的碎片太多。

如果该表有聚集索引,那么重建(dbcc dbreindex)该聚集索引即可;如果没有聚集索引,则临时给它新建一个,建好后,再马上删掉。这两种方法的原理都是一样的,都是通过聚集索引来重新排列数据,将表中的碎片去掉。

把相关表全部按上面操作之后,再收缩数据文件即可
------解决方案--------------------
由于聚集索引有组织数据的功能,把数据整理顺了,自然空出了很多空间,然后你DBCC SHOWCONTIG 中碎片多大80%多,已经达到了需要重建的地步了(微软建议30%以下:重组。30%以上:重建。)