有条件删除海量数据时,涉及的日志及空间问题

eksmile 2015-10-26 04:22:26
目前该表约有22亿数据,存储的是每天每小时的统计数据,每天每小时约50W的统计数据。(不要问我为什么这么搞,我也不知道。)
该表已经分区,分区粒度为若干个月,我同样也不知道为什么是无规则的若干个月。
每个分区的数据量为:1089266596、962350288、192485096(10亿,9.6亿,1.9亿)

因为占用存储空间太大,现决定,只保留每天23-24这个时点的统计数据,即:要清除另外23个小时的统计数据。

现在有三个问题:
1、如果只在当前表上进行DELETE操作,DELETE操作不会释放空间,并不能解决空间占用的问题。
2、DELETE操作,会记录日志,这么大数据量的操作,日志也会太大。恢复模式已经设置为“简单”了。
3、DELETE操作,即使按分区,操作时间也会很长吧。是否会超时导致失败?


目前的想法,建立一张临时表,对应的数据文件在另一个空间足够的磁盘上。
然后将每天23-24点的统计数据初始化到这张临时表。
然后,对当前22亿的表进行TRUNCATE操作。
然后,再将临时表的数据重新插入到目标表。

不知道是否可行。因为是在生产库上进行操作。担心如下几点问题:
1、22亿数据的TRUNCATE操作是否会产生不良影响
2、将临时表的数据插入到目标表的开销。
3、插入操作是否会产生大量日志,能否不记录操作日志呢?

盼大家给出意见和建议。
...全文
109 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
1、22亿数据的TRUNCATE操作是否会产生不良影响 还真没有试过这么大的表truncate,不过按照常理来说,如果你在系统空闲时间truncate,应该不会有什么问题。 2、将临时表的数据插入到目标表的开销。 因为你说每天每小时50w条数据,而你只想插入23-24这么1个小时的数据,那应该不会有什么问题,会很快。 3、插入操作是否会产生大量日志,能否不记录操作日志呢? 肯定会产生大量日志,就算你改成 简单模式,不过既然是简单模式,也就说明你不会备份数据库,那么日志文件就能循环使用,应该不会导致日志文件的增长,另外,你可以在插入完成后,收缩一下日志文件。
回复
yooq_csdn 2015-10-27
1、你确定要释放数据库占用的空间,今天你删除了22亿条,明天还会有新数据的。明天数据库空间还需要增长,所以不建议释放空间。 2、大量数据删除时会占用大量日志空间。可以每次删除一部分,少量多次,循环删除。 3、如果释放空间可以在删除后收缩一下数据库。
回复
eksmile 2015-10-26
引用 3 楼 jinfengyiye 的回复:
操作不备份,你确定22亿数据都不要了? 我后面说的备份是提示操作的一个习惯。提供的方法与备份没有任务关系。
确认不要了。目前业务量不多。基本都是0。 保存的都是统计数据,其实没多大实际意义。
回复
gw6328 2015-10-26
操作不备份,你确定22亿数据都不要了? 我后面说的备份是提示操作的一个习惯。提供的方法与备份没有任务关系。
回复
eksmile 2015-10-26
引用 1 楼 jinfengyiye 的回复:
不知道这样可否? 新建一个表,把你要的数据插入。 改表名。 操作前备份。
22亿的数据,基本不考虑备份的可能性了。 因为目标表是分区表,不知道改名可行不可行。 所以我的想法是,把目标表TRUNCATE后,再从临时表插入回去。 现在主要是担心插入的时候,日志太多。 爆掉。 对于日志,没有什么概念。不知道是什么量级。
回复
gw6328 2015-10-26
不知道这样可否? 新建一个表,把你要的数据插入。 改表名。 操作前备份。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-10-26 04:22
社区公告
暂无公告