为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:--03134284058-20230713-195546-20046 Pack2
【操作系统】:UnionTech OS Server 20
【CPU】:Hygon C86 7285 32-core Processor
【问题描述】*:
在库中执行plsql,内存异常增长,
plsql如下:(是一个分批插入的)
DECLARE CURSOR cur IS select * from PRPLTEMPLATEPLATINTERFACE_BAK WHERE taskStatus <> '5';
TYPE rec IS TABLE OF PRPLTEMPLATEPLATINTERFACE%ROWTYPE;
recs rec;
cou int;
start_time timestamp;
BEGIN
OPEN cur;
cou:=0;
select sysdate into start_time;
WHILE (TRUE) LOOP
FETCH cur BULK COLLECT INTO recs LIMIT 1000000;
FORALL i IN 1 .. recs.COUNT
insert into PRPLTEMPLATEPLATINTERFACE VALUES recs (i);
cou := cou+recs.COUNT;
COMMIT;
EXIT WHEN cur%NOTFOUND;
END LOOP;
CLOSE cur;
insert into PRO_EXEC_LOG select 'PRPLTEMPLATEPLATINTERFACE','INSERT',start_time,SYSDATE,cou from dual;
commit;
END;
plsql已结束,但内存降不下来。
可以开一下MEMORY_LEAK_CHECK看看
批量改小到1万试试FETCH cur BULK COLLECT INTO recs LIMIT 10000;
嵌套表集合变量 一次存10W是否正常,查询里有多少个字段