楼主: wanyanhu

[PL/SQL] 【讨论】bulk collect insert 效率慢

[复制链接]
论坛徽章:
4
祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-01-04 08:33:082015年新春福章
日期:2015-03-04 14:51:122015年新春福章
日期:2015-03-06 11:57:31
11#
发表于 2015-2-12 22:14 | 只看该作者
io 情况如何?有什么等待事件没

使用道具 举报

回复
论坛徽章:
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
12#
发表于 2015-2-13 15:05 | 只看该作者
单独加数据删索引还可以,生产库就不能删除索引,生产库带着索引,加载速度也比这个快很多,估计不仅仅是索引问题。

使用道具 举报

回复
论坛徽章:
15
2013年新春福章
日期:2013-02-25 14:51:242015年新春福章
日期:2015-03-06 11:58:18美羊羊
日期:2015-03-04 14:52:28马上有钱
日期:2014-12-22 21:25:57马上有房
日期:2014-04-16 17:40:23马上有钱
日期:2014-04-10 10:55:56优秀写手
日期:2014-03-20 06:00:362014年新春福章
日期:2014-03-06 13:50:46马上有钱
日期:2014-02-18 16:43:092014年新春福章
日期:2014-02-18 16:43:09
13#
发表于 2015-3-4 21:46 | 只看该作者
最近也再整理这部分内容,关键是这种从一个表到另一个表的插入,中间没有任何过程的处理,这种情况下为什么还要用pl/sql来处理。不是应该优先选用sql吗。

使用道具 举报

回复
论坛徽章:
0
14#
发表于 2022-2-8 16:07 | 只看该作者
yulihua49 发表于 2015-2-12 12:35
我们带着6个索引插入也没这么慢。400万,两分半。146字段,1.5KB每行。有分区。把数据吐出来,分发成2个RAC ...

你好,你的这个案例能不能写出来学习下,怎么实现分发成2个rac节点和每批次提交限制的呢?谢谢

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
15#
发表于 2022-2-8 23:41 | 只看该作者
白浪巨沙 发表于 2022-2-8 16:07
你好,你的这个案例能不能写出来学习下,怎么实现分发成2个rac节点和每批次提交限制的呢?谢谢

余老师用C写的数据库包装器不是一般人玩得动的。
用并行INSERT ... SELECT ..试试,读和写都开并行。如果你能手工把数据隔离就可以在不同的节点上跑。

使用道具 举报

回复
论坛徽章:
0
16#
发表于 2022-2-10 11:08 | 只看该作者
newkid 发表于 2022-2-8 23:41
余老师用C写的数据库包装器不是一般人玩得动的。用并行INSERT ... SELECT ..试试,读和写都开并行。如果你 ...

并行INSERT ... SELECT 这个理解,“能手工把数据隔离”这个没玩过,不太理解,怎么玩的呢?

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
17#
发表于 2022-2-10 23:55 | 只看该作者
就是把一个任务拆成多个不相干的子任务。比方说你读取的数据覆盖了两个月份,或两个地区,或两个不同的分区,那么你就可以写成两个WHERE条件,分别连到两个节点上去跑。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
18#
发表于 2022-8-1 20:38 | 只看该作者
本帖最后由 yulihua49 于 2022-8-1 20:57 编辑
白浪巨沙 发表于 2022-2-8 16:07
你好,你的这个案例能不能写出来学习下,怎么实现分发成2个rac节点和每批次提交限制的呢?谢谢

退休好几年了,今天闲逛才看到你的帖子。
newkid老师说的对,我这个需要一个大系统架构来做。
就是说,一个分布式并行系统可以把这种任务进行的非常快。
我们的架构是把每一个部件的能力发挥到极致。这不是一个SQL语句能解决的。
实际效果是,两个RAC节点,面对3个计算服务器,每个服务器32核32线程。一个任务分配器,读出数据记录,分成每组1000个(经试验,这个数最快),分发到96个线程,进行一个复杂的计算,结果成批update回去。计算太复杂,通过96并行可以将计算时间忽略不计。看作读出来,分批update即可。3个计算服务器,共有15个连接指向2个RAC节点。
资源是精准分组的,每服务器5个连接最快。太大的并行度反而慢。400万记录处理完用5分钟。现在每天的数据量应该是在1000万以上了。退休了,不太了解了。
一个select(任务分配器)占1个连接,+15个update连接,共16个连接自动分配在两个RAC节点。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
19#
发表于 2022-8-1 21:20 | 只看该作者
本帖最后由 yulihua49 于 2022-8-1 21:22 编辑
yulihua49 发表于 2022-8-1 20:38
退休好几年了,今天闲逛才看到你的帖子。newkid老师说的对,我这个需要一个大系统架构来做。就是说,一个分 ...

任务分配器有个2维的socket连接池管理N个服务器,每个服务器任意个连接。可以任意设置。有负载均衡和容错功能。
每个计算服务器也有个二维的数据库连接池,可以设置N个数据库,每个数据库的不同连接数。
调节这些参数以取得最大的系统吞吐量。
就是说,把数据拿出来,处理完了再update回去,可能比一条SQL所能做的,要快很多。

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
20#
发表于 2022-8-1 21:23 | 只看该作者
〇〇 发表于 2015-2-2 23:57
删除索引,插入完成后重建

带着6个索引,不删。
批量update,没索引对不上号了。

使用道具 举报

回复

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

本版积分规则 发表回复

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