首页 > 开发 > 综合 > 正文

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

2024-07-21 02:32:43
字体:
来源:转载
供稿:网友
     在批量处理数据时,比如从上亿条记录的表中删除上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,而不是通过索引扫描,性能当然会略有提升,但总体来讲,比后半部分的代码,性能上还是大大不如……

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表