分享
 
 
 

如何更快地批量数据处理?

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

在批量处理数据时,比如从上亿条记录的表中删除上1000万条数据,不仅要考虑对undo的影响,还要考虑对redo,对磁盘i/o,锁、阻塞等的影响,在某种意思上讲,同样的任务,执行的sql次越少,总的消耗的时间就越少……

create table tmp_object1 as select * from dba_objects;

create index idx_object1_name on tmp_object1(object_name);

create table tmp_object2 as select * from dba_objects;

alter session set events '10046 trace name context forever, level 12';

declare

cursor cur_obj1 is select object_name from tmp_object1;

type v_array is table of tmp_object1.object_name%type;

v_obj1 v_array;

begin

open cur_obj1;

loop

fetch cur_obj1 bulk collect into v_obj1 limit 10000;

forall i in 1..v_obj1.count

delete from tmp_object1 where object_name = v_obj1(i);

commit;

exit when cur_obj1%notfound;

end loop;

close cur_obj1;

end;

/

alter session set events '10046 trace name context off';

OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call count cpu elapsed disk query current rows

------- ------ -------- ---------- ---------- ---------- ---------- -------

Parse 16 0.00 0.00 0 2 0 0

Execute 26 9.23 9.03 254 52778 121592 51712

Fetch 39 0.07 0.07 1 1363 0 51735

------- ------ -------- ---------- ---------- ---------- ---------- -------

total 81 9.31 9.11 255 54143 121592 103447

Misses in library cache during parse: 5

Misses in library cache during execute: 4

Elapsed times include waiting on following events:

Event waited on Times Max. Wait Total Waited

---------------------------------------- Waited ---------- ----------

db file sequential read 254 0.00 0.00

alter session set events '10046 trace name context forever, level 12';

declare

v_cnt number;

begin

select count(*) into v_cnt

from tmp_object2;

v_cnt := floor(v_cnt/10000) + 1;

for i in 1..v_cnt loop

delete from tmp_object2 where rownum <= 10000;

commit;

end loop;

end;

/

alter session set events '10046 trace name context off';

OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call count cpu elapsed disk query current rows

------- ------ -------- ---------- ---------- ---------- ---------- -------

Parse 14 0.00 0.00 0 2 0 0

Execute 24 1.15 1.70 0 2785 57665 51712

Fetch 31 0.04 0.04 712 865 0 22

------- ------ -------- ---------- ---------- ---------- ---------- -------

total 69 1.20 1.75 712 3652 57665 51734

Misses in library cache during parse: 3

Misses in library cache during execute: 1

Elapsed times include waiting on following events:

Event waited on Times Max. Wait Total Waited

---------------------------------------- Waited ---------- ----------

db file sequential read 17 0.00 0.00

db file scattered read 67 0.00 0.01

log file switch completion 3 0.02 0.04

log buffer space 1 0.11 0.11

说明:在上面的前半部分示例代码中,若把object_name = v_obj(i)改成rowid = v_obj(i),删除数据时用rowid,而不是通过索引扫描,性能当然会略有提升,但总体来讲,比后半部分的代码,性能上还是大大不如……

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有