楼主: eksmile

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

[复制链接]
论坛徽章:
1
优秀写手
日期:2014-09-30 06:00:13
31#
发表于 2015-10-28 17:50 | 只看该作者
eksmile 发表于 2015-10-26 17:11
对,目前我想到的,也是这个思路。

只是9100W的数据,从临时表数据插入到原来的表,这一过程,似乎会产 ...

加nologging  prallel *  参数,并行参数试试

使用道具 举报

回复
论坛徽章:
2
沸羊羊
日期:2015-03-04 14:55:412015年新春福章
日期:2015-03-06 11:59:47
32#
发表于 2015-10-29 08:54 | 只看该作者
eksmile 发表于 2015-10-28 13:49
select into 的那个表,是自己在数据库的默认分区创建一个表。

我试了一下,如果我提前创建好那个表, ...

所以我让你select into前,把那个表干掉(删除),呵呵。

使用道具 举报

回复
论坛徽章:
1
白羊座
日期:2015-12-15 17:21:48
33#
发表于 2015-10-30 14:00 | 只看该作者
eksmile 发表于 2015-10-27 13:57
select into 到临时表后, 把目标表truncate了,然后从临时表导入回目标表时,不能用select into。而bulk ...

select into到临时表,把目标表truncate了,然后将临时表中数据生成BCP文件,将BCP文件采集到目标表中,这个数据应该是挺快的

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
34#
发表于 2015-10-30 14:13 | 只看该作者
jieyancai 发表于 2015-10-27 10:37

同意该作法,Bulk Logging 和使用临时表,这样应该可以解决你的问题。

使用道具 举报

回复
论坛徽章:
5
秀才
日期:2015-11-12 17:43:40秀才
日期:2015-11-23 09:48:22秀才
日期:2015-11-23 10:17:19秀才
日期:2015-11-30 09:13:06秀才
日期:2015-11-30 09:59:23
35#
发表于 2015-10-31 15:31 | 只看该作者
学习一下,大批量数据操作还是分的时候就细化出来比较好

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-07-12 06:00:13
36#
发表于 2015-11-17 17:52 | 只看该作者
这种大面积的删除更新不如重建,思路就很简单了直接insert as select 然后truncate就完了 更好的办法就是做表空间转移到备份盘备份速度快效率高

使用道具 举报

回复
论坛徽章:
55
生肖徽章2007版:鸡
日期:2009-05-30 12:43:26巨蟹座
日期:2015-10-16 09:34:02双鱼座
日期:2015-09-22 09:32:52生肖徽章2007版:猪
日期:2009-06-30 12:54:12海蓝宝石
日期:2013-01-15 14:14:132014年世界杯参赛球队: 哥斯达黎加
日期:2014-05-26 14:20:10生肖徽章2007版:马
日期:2009-11-06 16:52:02生肖徽章2007版:兔
日期:2009-07-21 09:12:35复活蛋
日期:2011-11-23 13:50:50蛋疼蛋
日期:2012-02-08 16:55:58
37#
发表于 2015-11-19 10:30 | 只看该作者
日期时间加个簇索引,1天23个小时1千多万的数据,按时间分批次删除比如1次删除一个小时的

使用道具 举报

回复
论坛徽章:
5
优秀写手
日期:2014-03-26 05:59:56马上有钱
日期:2014-10-30 16:45:50白羊座
日期:2015-11-10 11:35:01秀才
日期:2015-12-25 15:31:10秀才
日期:2016-01-25 15:02:04
38#
发表于 2015-11-19 12:52 | 只看该作者
本帖最后由 WY24420 于 2015-11-19 12:53 编辑

现在有三个问题:
1、如果只在当前表上进行DELETE操作,DELETE操作不会释放空间,并不能解决空间占用的问题。
谁告诉你的,“DELETE操作不会释放空间,并不能解决空间占用的问题”,DELETE之后释放的空间可以重用


2、DELETE操作,会记录日志,这么大数据量的操作,日志也会太大。恢复模式已经设置为“简单”了。
3、DELETE操作,即使按分区,操作时间也会很长吧。是否会超时导致失败?

这个就是个设计问题了,你做一个中间表,存储一天的数据,定期从这里面抽取你想要的数据到目标表,然后truncate这个表,依次循环继续使用这个表

使用道具 举报

回复
论坛徽章:
77
20周年集字徽章-周
日期:2020-10-28 14:51:04秀才
日期:2017-03-28 15:11:09秀才
日期:2017-03-20 13:42:20秀才
日期:2017-03-01 13:53:39秀才
日期:2017-02-22 15:18:00秀才
日期:2017-02-22 15:16:26秀才
日期:2017-02-22 15:14:12进士
日期:2017-02-20 09:43:02举人
日期:2017-02-20 09:42:18进士
日期:2017-02-20 09:42:18
39#
发表于 2015-11-19 17:45 | 只看该作者
这种表需要采用分区。

使用道具 举报

回复
论坛徽章:
0
40#
发表于 2015-12-2 17:54 | 只看该作者
alter table table_name nologging;这个表就不会记录日志了
解决完后,再把目标表alter table table_name logging即可

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表