sqlserver数据库里最大的表删了80%的记录(约7亿条),但是mdf文件才从110G减少了3G,为啥?怎么解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver数据库里最大的表删了80%的记录(约7亿条),但是mdf文件才从110G减少了3G,为啥?怎么解决?相关的知识,希望对你有一定的参考价值。

其它的表大部分只有几百条记录,有一个大的也只有600万条记录。
原以为能从110G缩小到20-30G,结果107G,和预期相差太大。
从压缩shrink那儿看也只有1G空间。
是不是有什么自动备份的东西没有删?怎么删?

不是的。。这个是因为你数据库的数据虽然删除了。但是数据库的体积并没有减少多少。。

就好比说一个大盆子..原来是装满的..现在倒掉了一大半的水..但是盆子的体积并没有减小..你从外边看还是那么大的一个盆子..尽管里边空空如也...

这个时候你可以用数据库 任务里的压缩功能..他会把盆子变小的..
有帮助,请采纳..追问

不是的。盆的比喻不错,但是与我的情形无关。请看清楚,压缩我当然知道,但是压缩那儿显示只有1G不到的空间,也就是盆子只剩下不到1G,压完了之后顶多再少1G。

而且,这已经是压缩之后的结果了。

参考技术A lz是不是delete之后又新插过数据了?查查各个表的数据量
另外这个表有没有触发器之类的delete的时候处理过了

不然理论上不可能shrink才1G,除非你删的这个表只有个bit列追问

delete之后新插数据又怎么样呢?就算没删?还是索引不删?
没有触发器。

追答

我的意思是,如果你删了7亿数据,又插入了6亿,那shrink后变化肯定小啊
或者你的这个表删了7亿数据,其他表恰好插入了6亿数据,也一样啊
还有就是,可能多次一问
你确定是mdf文件没有缩减?还是根据盘符中显示的容量判断的?
delete数据是要写日志的,shrink mdf也要shrink log

追问

删了7亿条,新插入的不超过几百条,基本可以忽略。-7亿+6亿的算术我还是会算的。
日志当然早就清了,从十几个G清到了1M。
mdf的容量在资源浏览器也看了,用sp_spaceused也看了。

追答

难道你这个库就只有这一个表吗?
你最好看看是不是别的表数据量骤增了,
不然的话shrink没效果就只能是有人提高了数据库的默认大小

参考技术B 可能是因为索引的关系。我目前能想到的办法是把这些记录复制到新的表(或者是库)中,然后删除旧的库文件。。学识浅薄,聊发看法。追问

约100G老表,很难复制到新表的,要么超时,要么停止工作几天,但是工作又不能停

追答

我google的答案,看一下对你的情况有没有帮助吧,学弟我只能做到这一步了http://stackoverflow.com/questions/2144838/mdf-sql-database-file-is-over-88-gb-and-i-have-no-idea-why和http://blog.sqlauthority.com/2009/01/25/sql-server-shrinking-ndf-and-mdf-files-a-safe-operation/

参考技术C 你先将保留数据缓存到一个临时命名的表中,后drop表重建,后再将数据插入。空间应该可以释放了。追问

用insert的话,约100G老表,很难复制成功的,要么超时,要么停止工作几天,但是工作又不能停


另外,保留数据缓存,就是指insert into 临时表 select * from 旧表?

参考技术D 1)应该就是used space大了。
2)只有压缩一条路。
3)无法单独压缩索引。本回答被提问者采纳

SQL安装出现以下问题,求帮忙,我之前安装过,但是卸载了,但是服务里还是有SQL ,谁帮忙把那个全删了啊

标题: SQL Server 安装程序失败。
------------------------------
SQL Server 安装程序遇到以下错误:
在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。。
------------------------------
按钮:
确定
------------------------------

参考技术A 先退出安装,然后:
1.停掉SQL SERVER所有相关服务 ()
2.在控制面板“添加删除程序”中,删除SQL SERVER 相关的程序
3.下载 Windows Install Clean Up 工具卸载SQL 2008组件,删除所有SQL服务
4.清除注册表
 将HKEY_CURRENT_USER---Software----Microsoft下的Microsoft SQL Server文件夹全部删除
 将HKEY_LOCAL_mACHINE---SOFTWARE---Microsoft下的Microsoft SQL Native Client ,Microsoft SQL Server, Microsoft SQL Server 2008 Redist全部删除
5.删除残留文件
6.将SQL SERVER安装路径下,如:C盘——Program File下的Microsoft SQL Server 文件夹删除
7.重启计算机

这种问题我建议最好百度一下 ,我说的可能还不全面。

以上是关于sqlserver数据库里最大的表删了80%的记录(约7亿条),但是mdf文件才从110G减少了3G,为啥?怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

mysql提示table不存在:把数据库里的表都删了,用sql重新建表,怎么还提示表不存在呢?是在服务器上

MariaDB日志审计 帮你揪出内个干坏事儿的小子

sqlserver 查询数据库里数据量最大的表

在sql server中清空了数据记录但是对应的数据库文件的大小没有变小

SQL安装出现以下问题,求帮忙,我之前安装过,但是卸载了,但是服务里还是有SQL ,谁帮忙把那个全删了啊

怎么复制sqlserver数据库里所有的表到另一个数据库中