SqlServer数据文件太大,表占用空间太大,怎么释放空间

lxljw1314 2014-12-16 02:11:07
SqlServer2008 r2数据库,数据文件太大了,谁知道,这里的保留,还有未使用,都是怎么来的么?
我最大的表有上亿条数据,保留有80多个g,但是实际数据大小只有40多g,还有40多g未使用,这些都占用磁盘空间,现在搞得磁盘都满了。。。自动收缩数据库只能收缩日志文件的一部分,mdf文件还是没怎么变小。。求救。。。
...全文
21945 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxljw1314 2014-12-17
  • 打赏
  • 举报
回复
建聚集索引失败,提示事务日志已满。。。。
發糞塗牆 2014-12-17
  • 打赏
  • 举报
回复
完整备份+日志备份,先做了再搞别的
lxljw1314 2014-12-17
  • 打赏
  • 举报
回复
好的,这个终于结束了。。。释放了几十个g。。。感谢大神!!希望对前端数据展现不会有什么影响,处理下一个表去
發糞塗牆 2014-12-17
  • 打赏
  • 举报
回复
你应该用收缩文件而不是收缩数据库的选项
lxljw1314 2014-12-17
  • 打赏
  • 举报
回复

没看到有能停止的地方哦。。。一直都是正在执行
lxljw1314 2014-12-17
  • 打赏
  • 举报
回复
怎么500m一次收缩,哪里可以这么设置的
Tiger_Zhao 2014-12-17
  • 打赏
  • 举报
回复
生产环境还是加硬盘,空间这么紧张出故障维护都没办法了。
發糞塗牆 2014-12-17
  • 打赏
  • 举报
回复
收缩是可以马上停止的,你先停了,然后500M甚至100M每次地收缩
發糞塗牆 2014-12-17
  • 打赏
  • 举报
回复
收缩幅度不要太大,比如有10G可收缩空间,你最好每次500M,一下子收缩过大会引起磁盘无法响应
lxljw1314 2014-12-17
  • 打赏
  • 举报
回复
我这是生产环境,不可能执行上述删除重建操作啊。。。试了几次建聚集索引,建完那张表本来占用80g的空间,现在只占用28g的空间,然后现在正在收缩,不知道能不能释放磁盘空间,已经执行了好几个小时了。。。。
Tiger_Zhao 2014-12-17
  • 打赏
  • 举报
回复
时间充足就断线停止写入数据库,做个全备份。
删除数据库,删除数据库文件。
整理下磁盘。
重建同名数据库,恢复数据库。
这时候的空间是最紧凑的,可以试试建聚集索引。

最根本的方法是加硬盘,可能你的数据操作规律就是会产生很多碎片的,必须要有双倍的空间才行。
LongRui888 2014-12-17
  • 打赏
  • 举报
回复
引用 6 楼 liuxiang860927 的回复:
那我这个怎么处理呢,其中几个大表直接占用了百分之90的磁盘空间,而且这几个表都是使用空间和未使用空间一半一半的占用空间。。。把表数据清了,重新load??能有用么? 还有那个自动收缩功能,如果选择文件,选择mdf主文件,有个收缩操作,‘在释放未使用的空间前重新组织页’ 有没有用的?
你试试,应该是可以收缩一部分mdf文件的空间的。 另外,日志文件也可以收缩,可以先做个完整备份,然后就可以收缩 日志文件,可以收缩到 非常小。
發糞塗牆 2014-12-16
  • 打赏
  • 举报
回复
如果没有聚集索引就建个聚集索引,如果有聚集索引就重建一下
lxljw1314 2014-12-16
  • 打赏
  • 举报
回复
那我这个怎么处理呢,其中几个大表直接占用了百分之90的磁盘空间,而且这几个表都是使用空间和未使用空间一半一半的占用空间。。。把表数据清了,重新load??能有用么?
还有那个自动收缩功能,如果选择文件,选择mdf主文件,有个收缩操作,‘在释放未使用的空间前重新组织页’ 有没有用的?
發糞塗牆 2014-12-16
  • 打赏
  • 举报
回复
数据会因为被增删改然后分配到不同的数据页中,特别是有一个算法,比如当堆表的数据页存放了4100btyes的数据,意味着有3960 bytes的空闲空间,PFS页会标识这个页属于51~80%的占用率,sqlserver此时不会再把超过20%页大小(约1612 bytes)的新行存进这个页,即使空间足够,然后进行分页,所以不是每个页都会填满,也是因此很多地方会建议使用聚集索引来组织数据
lxljw1314 2014-12-16
  • 打赏
  • 举报
回复
这些表是etl处理过后的目标表,插入数据给前端报表用的,我看了,基本都没建索引。。。我是不明白为什么有的表,就看着比较正常,保留空间和使用空间差不多少,但是有的保留空间,使用空间和未使用空间差别那么大。。。怎么能调整未使用空间呢
發糞塗牆 2014-12-16
  • 打赏
  • 举报
回复
有一种可能是索引碎片的原因,另外就是非聚集索引占用的空间,你可以试一下先重建聚集索引,然后看看空间是否变小了很多
Neo_whl 2014-12-16
  • 打赏
  • 举报
回复
如果有过期数据备份后删除吧
---涛声依旧--- 2014-12-16
  • 打赏
  • 举报
回复
最直接的就是看哪些数据可以不用存储就直接删除了,设计系统时就应该考虑这些问题的 比如:考勤系统的每天打卡数据,3个月前的根本没有多在作用了就可以先备份后直接删除了

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧