问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

高分求助:oracle 大表更新,大约200万,insert和update太慢,如何解决?

发布网友 发布时间:2022-05-05 08:13

我来回答

8个回答

懂视网 时间:2022-05-05 12:35

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表空间的监控。

热心网友 时间:2022-05-05 09:43

简单的看看搂主的描述 "需要从B表中一条一条去A表中核实"
我估计是用 游标来处理的。
如果用游标一行一行 FETCH , 性能可能要打点折扣。
这种情况下,可以尝试使用 BULK COLLECT 来批量加载。
下面是 Oracle 游标处理II - 使用BULK COLLECT 的例子。
http://hi.baidu.com/wangqing999/blog/item/2ea041cc0d4606037e3e6f20.html

又看了一下逻辑, 要是存在的话,更新,没有的话就插入。
如果没有其他的复杂的逻辑的话,那么用 MERGE 语句,可以直接处理掉。
下面是 MERGE 的例子
http://hi.baidu.com/wangqing999/blog/item/2879207af3e388370cd7da86.html

热心网友 时间:2022-05-05 11:01

写个存储过程,使用pl/sql MARGE INTO 方法

写法是这样的

  

详细访问百度问库:http://wenku.baidu.com/view/1308e0563c1ec5da50e27006.html

存储过程,你肯定会写,不会写就找我吧。我每天白天都在

热心网友 时间:2022-05-05 12:35

数据库 jsp页面
varchar32 String
int int
long long

不需要设置编码,只要保证页面和数据库都是utf-8就可以了,看看你的表中的字段类型,再对照着看看页面设置的类型,是否一致,问题就解决了!

热心网友 时间:2022-05-05 14:27

1. 先分步核实各动作消耗的时间, 确定缓慢原因
2. 如果是在A表中检索消耗的时间多, 则需要优化索引.
3. 如果是在插入的时间长, 需要优化系统配置, 系统优化关系方面太多, 无法在短篇内说明,
需要你去了解Oracle性能优化与操作系统优化的相关专著.

热心网友 时间:2022-05-05 16:35

建一个游标或者触发器可以解决查询慢的问题,然后根据索引获取要修改或要插入的数据,这样就快多了

热心网友 时间:2022-05-05 18:59

/*+ parallel(a,8) */ ,根据你们的服务器的配置,并行插入,/*+ parallel(a,8) */ 这个是8倍的并行.

热心网友 时间:2022-05-05 21:41

分批处理
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
顺风车司机独享订单时能接别人的单吗 顺风车独享是什么意思啊? 如何将电脑上的视频传输到苹果手机简单步骤让你随时随地观看电脑上的视... 电脑视频怎么传到苹果手机电脑里的照片和视频怎样传到苹果手机上 吃随便果得肠癌的案例是真的吗-随便果对身体是否有害 一个分数的分子扩大2倍,分母缩小到原来的2分之一,这个分数就扩大到原... ...分母缩小到原来的二分之一后等于二又五分之四,这个分数是多少... 一个最简分数,把它的分子扩大2倍,分母缩小3倍,就得3/5,这个最简分数是... 一个最简分数,把他的分子扩大2倍,分母缩小为原来的五分之四,这个... 一个最简分数的分子扩大2倍,分母缩小3倍得到6分之5,这个最简分数是多少... 江西有哪些有名小吃? 手机突然间密码不对了 广州琶洲展览会2017年3月26一28主要展什么,急! 广州琶洲的化妆品展会是什么时候? 琶洲国际会展中心最近有什么活动? 甘肃省体育专业高考分数线是多少分? 谁知道甘肃省卫校招收初中生的录取分数线 甘肃省今年直招士官理科192分能不能录取 甘肃省470分是不是本科? 1981年甘肃高考分数线 孩子感冒了鼻塞,睡觉不通气,怎么办? 孩子感冒鼻塞呼吸不畅,该怎么办啊? 我家孩子六岁 一到晚上就鼻塞出不来气 睡不着觉 怎么办 孩子鼻塞严重怎么办,两个鼻孔都不通气 出差来了重庆,在上清寺这边有没有什么美食推荐的 巫山最有特色、最出名的美食有哪些? 中餐厅4即将开播,你对这个节目有哪些期待? 硬盘分区工具,教您怎么给电脑硬盘分区 有哪些美食类日剧值得一看 爱与美食不可辜负,好吃好看的日本美食电影有哪些 科学作业冰和冰淇淋哪个融化的更快一些? 为什么用热水做冰淇淋比用冷水快? 冰淇淋化的快是水多么? 热水比冷水制冰哪个快一点 冷水与温水同时放入冰箱中冷冻,哪个结成冰快?为什么 冷水和热水!哪个冻冰冻的更快!为什么! 跟男朋友五年了,想说段话给他的信 写给五年后老公的信 至男朋友一起几年珍惜的一封信? 你写过最好的一封信是什么内容? (写给五年以后的我们) 我和女朋友去年订的婚,今年年底结婚 我们说好了写一封五年后的信,给彼此看, 写给10年后男朋友的暖心情书 给一年后的男朋友的一封信用什么app? 有没有和朋友一起肝的手游 关于勇往直前的励志名言 鼓励人有勇气的名言 关于鼓励人勇敢或受到挫折的名人名言? 勇往直前的名人名言 速度求10句勇往直前的名言警句!! 不忘初心,勇往直前的名人名言