ITPUB论坛-中国最专业的IT技术社区

 
 注册
热搜:
123
返回列表 发新帖
楼主: SQLSky

[SQL] 海量数据入库,关于临时段和Redo的问题

[复制链接]
论坛徽章:
20
迷宫蛋
日期:2011-11-25 14:00:472015年新春福章
日期:2015-03-06 11:57:31天枰座
日期:2015-07-18 17:23:54暖羊羊
日期:2015-06-15 10:03:48托尼托尼·乔巴
日期:2017-01-25 09:38:19秀才
日期:2017-03-02 10:30:14秀才
日期:2017-03-02 10:30:35秀才
日期:2017-06-29 10:16:48技术图书徽章
日期:2017-07-11 09:10:26喜羊羊
日期:2015-03-04 14:49:39
21#
发表于 2017-12-25 11:34 | 只看该作者
本帖最后由 dhhb 于 2017-12-25 11:37 编辑

你说的 “但是实际监控中,redo大小2g,还是6min左右切换一次”,这个是指30亿数据量的总量,你说的16万条,是把30亿数据量,切分成16万条1批,这样才会产生这么高的redo, 而不是16万条6分钟产生了2g的redo.  30亿的数据insert, 产生这个redo量应该是正常的. 每个redo 2g大小可以了,可以增加redo group来减少checkpoin incomplete.

总之就是要区分,这6分钟2g的redo,是多大数据量产生的,之前一直以为是16万条。

使用道具 举报

回复
论坛徽章:
0
22#
 楼主| 发表于 2017-12-25 14:02 | 只看该作者
dhhb 发表于 2017-12-25 11:34
你说的 “但是实际监控中,redo大小2g,还是6min左右切换一次”,这个是指30亿数据量的总量,你说的16万条 ...

分成1.6W一批入库,在入30亿的过程中redo 日志大概是6min切换一次,刚开始一批入库的时间实在300ms,到现在的话 入1.6w需要1.5秒多~

使用道具 举报

回复
论坛徽章:
0
23#
 楼主| 发表于 2017-12-25 14:05 | 只看该作者
newkid 发表于 2017-12-22 11:44
都跟你说了 select 变量 from dual, 何不试试?

版主,我之前写的插入方法是
insert into table  values(:ID, :Time, :Msec, ata);然后将对应的id数组,time数组等赋给命令参数,相当于一次写入了一整个数组的数据,这个看资料,应该是目前最快的oracle批量写入的代码方式;
用您说的方式。。。我这边不知道咋写啊,直接select 数组好像不行~

使用道具 举报

回复
论坛徽章:
185
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39ITPUB季度 技术新星
日期:2016-07-07 09:28:30马上有房
日期:2014-11-07 08:46:05马上有钱
日期:2014-11-12 09:33:24马上有钱
日期:2014-11-24 15:17:08马上有对象
日期:2015-01-14 17:33:15沸羊羊
日期:2015-02-11 09:07:41懒羊羊
日期:2015-03-04 09:03:43暖羊羊
日期:2015-03-04 14:50:37
24#
发表于 2018-1-4 16:54 | 只看该作者
SQLSky 发表于 2017-12-21 16:43
1. 是存在即更新,不存在即插入;
2. buffer应该是足够的,开了将近100mb。内存表sqlserver里面有,orac ...

是存在即更新,不存在即插入;
--//这样如果存在记录多,redo也会很大.我觉得你应该找个12c测试看看.利用12c的
Temporary Undo,由数据库参数temp_undo_enabled控制.也许会好一些.

使用道具 举报

回复
论坛徽章:
185
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39ITPUB季度 技术新星
日期:2016-07-07 09:28:30马上有房
日期:2014-11-07 08:46:05马上有钱
日期:2014-11-12 09:33:24马上有钱
日期:2014-11-24 15:17:08马上有对象
日期:2015-01-14 17:33:15沸羊羊
日期:2015-02-11 09:07:41懒羊羊
日期:2015-03-04 09:03:43暖羊羊
日期:2015-03-04 14:50:37
25#
发表于 2018-1-4 16:57 | 只看该作者
我自己还有一些疑问.
create global temporary table t(id number,test varchar2(20),pad varchar2(20)) on commit preserve rows;
insert into t select rownum,'BBBB1234','DDDDD' from dual connect by level<=1e5;
commit;
alter system checkpoint;

--//为什么我扫临时文件我看不到信息.
$ strings -t x /mnt/ramdisk/book/temp01.dbf | grep BBBB1234

使用道具 举报

回复
认证徽章
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
26#
发表于 2018-1-4 17:48 来自手机 | 只看该作者
lfree 发表于 2018-1-4 16:57
我自己还有一些疑问.
create global temporary table t(id number,test varchar2(20),pad varchar2(20)) o ...

你写的内容也许并没在文件中,因为checkpoint可能对GTT不起作用。

使用道具 举报

回复
论坛徽章:
486
秀才
日期:2015-09-09 10:33:01秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21
27#
发表于 2018-1-5 00:35 | 只看该作者
SQLSky 发表于 2017-12-25 14:05
版主,我之前写的插入方法是
insert into table  values(:ID, :Time, :Msec, ata);然后将对应的id数组 ...

我明明告诉你SELECT FROM DUAL, 你为什么要改成SELECT FROM数组?你既然会写那个INSERT,就把后面的文本改一下有什么难的?然后照用你原来的数组绑定方式。

insert into table  values(:ID, :Time, :Msec, ata);

改成:
insert /*+ APPEND */ into table  SELECT :ID, :Time, : Msec, ata FROM DUAL;

使用道具 举报

回复
论坛徽章:
185
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39ITPUB季度 技术新星
日期:2016-07-07 09:28:30马上有房
日期:2014-11-07 08:46:05马上有钱
日期:2014-11-12 09:33:24马上有钱
日期:2014-11-24 15:17:08马上有对象
日期:2015-01-14 17:33:15沸羊羊
日期:2015-02-11 09:07:41懒羊羊
日期:2015-03-04 09:03:43暖羊羊
日期:2015-03-04 14:50:37
28#
发表于 2018-1-5 08:36 | 只看该作者
sqysl 发表于 2018-1-4 17:48
你写的内容也许并没在文件中,因为checkpoint可能对GTT不起作用。

嗯,学习没学好,有点思维惯性.

实际上checkpoint仅仅对数据文件的脏块写盘有效.
要执行.
alter system flush buffer_cache;才有效.

使用道具 举报

回复
认证徽章
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
29#
发表于 2018-1-5 09:23 来自手机 | 只看该作者
lfree 发表于 2018-1-5 08:36
嗯,学习没学好,有点思维惯性.

实际上checkpoint仅仅对数据文件的脏块写盘有效.

谢谢反馈,受教。

使用道具 举报

回复
论坛徽章:
0
30#
 楼主| 发表于 2018-1-8 22:15 | 只看该作者
newkid 发表于 2018-1-5 00:35
我明明告诉你SELECT FROM DUAL, 你为什么要改成SELECT FROM数组?你既然会写那个INSERT,就把后面的文本改 ...

受教了!我去试试看

使用道具 举报

回复

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

本版积分规则

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