Oracle10g大表批量更新优化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Oracle10g大表批量更新优化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2550字,纯文字阅读大概需要4分钟。
内容图文
![Oracle10g大表批量更新优化](/upload/InfoBanner/zyjiaocheng/542/b63adcf96ee141e0872022179ff0465d.jpg)
racle 10g大表批量更新优化,其实,700万的表不算大表,作为测试够了 一,t表信息 SQL alter table t add is_del number(1); SQL alter table t modify is_del default 0; SQL desc t Name Type Nullable Default Comments ------ --------- -------- -------
racle 10g大表批量更新优化,其实,700万的表不算大表,作为测试够了一,t表信息
SQL> alter table t add is_del number(1);
SQL> alter table t modify is_del default 0;
SQL> desc t
Name Type Nullable Default Comments
------ --------- -------- ------- --------
ID NUMBER Y
CODE NUMBER Y
IS_DEL NUMBER(1) Y 0
SQL> select count(*) from t;
COUNT(*)
----------
7136976
二,为了比较基准的一致性,先缓存t数据
update t set t.is_del = 0;
三,这里共总结了4种方法
SQL> set timing on
--0
SQL> update t set t.is_del = 0;
7136976 rows updated.
Elapsed: 00:08:28.64
--1
SQL> declare
2 rnt pls_integer := 0;
3 begin
4 for idx in (select rowid rid from t) loop
5 update t set t.is_del = 0 where rowid = idx.rid;
6 rnt := rnt + 1;
7 if mod(rnt,2000) = 0 then
8 commit;
9 end if;
10 end loop;
11 commit;
12 end;
13 /
PL/SQL procedure successfully completed.
Elapsed: 00:09:41.32
SQL>
--2
SQL> declare
2 rnt pls_integer := 0;
3 begin
4 for idx in (select rowid rid from t) loop
5 update t set t.is_del = 0 where rowid = idx.rid;
6 rnt := rnt + 1;
7 if rnt = 2000 then
8 rnt := 0;
9 commit;
10 end if;
11 end loop;
12 commit;
13 end;
14 /
PL/SQL procedure successfully completed.
Elapsed: 00:09:35.67
--3
SQL> declare
2 cursor cur_t is select rowid rid from t;
3 type tab_t is table of urowid index by binary_integer;
4 l_rid tab_t;
5 begin
6 open cur_t;
7 loop
8 fetch cur_t bulk collect into l_rid limit 2000;
9 forall idx in 1 .. l_rid.count
10 update t set t.is_del = 0 where rowid = l_rid(idx);
11 commit;
12 exit when cur_t%notfound;
13 end loop;
14 close cur_t;
15 end;
16 /
PL/SQL procedure successfully completed.
Elapsed: 00:06:48.84
通过上面的测试结果可以看到,方法3最好,方法0不建议使用,这会使undo快速增长,出现ora-01555错误。方法1和方法2在一些书籍上看到过测试,说方法2优于方法1,但我这次测试效果不明显,以后再进行一些测试。
注:
测试的数据库配置了闪回特性,db_recovery_file_dest_size=2g,归档日志放在db_recovery_file_dest目录中。开始时的更新操作,redo增长很快,常常hang住了,alert log报空间不足,所有增加了db_recovery_file_dest_size=4g。还有要注意undo表空间的监控。
内容总结
以上是互联网集市为您收集整理的Oracle10g大表批量更新优化全部内容,希望文章能够帮你解决Oracle10g大表批量更新优化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。