Zso*_*kai 1 oracle performance plsql code-generation sequence
我必须从某些表中生成一些百万更新,以更新自己.我最近刚刚了解到parallel(tablename,threads),当我运行这样的东西时,PLIS开发人员的性能真正得到了改善:
select /* + parallel(table1,100) parallel(table2,100) */
'update table1 set id = 1 where ... and id = '||table1.id||' ...
where ...
Run Code Online (Sandbox Code Playgroud)
(我这样做,因为它在更新时给了我备份数据.我的BOSS告诉我这样做;-))
因此,当在set id = 1部件和PLSQL Developer中使用静态数字时,它确实很快.
但后来我把它写到一个文件中,然后插入一个create sequence,并尝试使用如下序列:
create sequence myseq
start with 4200000
increment by 1
maxvalue 11200000;
select /* + parallel(table1,100) parallel(table2,100) */
'update table1 set id = '||myseq.nextval||' where ... and id = '||table1.id||' ...
where ...
Run Code Online (Sandbox Code Playgroud)
但现在它非常缓慢.我不知道为什么.我只是重新编写了update生成器,在那里插入静态数据,然后用awk一系列数字替换它,但是有人可以解释导致这种情况的原因(我可以对它做些什么)吗?
提前致谢!
序列可能是一个瓶颈,特别是当多个会话/线程同时使用它们时.
您可以采取的主要措施是增加缓存的序列值的数量: ALTER SEQUENCE CACHE n替换n为大于20的值(默认值).我建议将其设置得更高,因为您将在一个语句中使用许多或所有序列值.你可以高达(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT).
| 归档时间: |
|
| 查看次数: |
1122 次 |
| 最近记录: |