首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >序列的SQL(plus)性能

序列的SQL(plus)性能
EN

Stack Overflow用户
提问于 2010-10-14 04:36:34
回答 1查看 1.3K关注 0票数 1

我必须从一些表中生成数百万个更新,以更新它们自己。我最近才了解到parallel(tablename,threads),当我运行下面的代码时,它确实提高了PLSQL developer的性能:

代码语言:javascript
运行
复制
select /* + parallel(table1,100) parallel(table2,100) */
       'update table1 set id = 1 where ... and id = '||table1.id||' ...
where ...

(我这样做是因为它为我提供了更新中的备份数据。我的老板让我这样做;-)

因此,在set id = 1部件和PLSQL Developer中使用静态数字时,它真的工作得很快。

但随后我将其写入一个文件,并在此之前插入了一个create sequence,并尝试使用如下序列:

代码语言:javascript
运行
复制
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 ...

但现在它的速度非常慢。我也不知道为什么。我刚刚重写了update生成器,以便在其中插入静态数据,并使用awk将其替换为一个数字序列,但是谁能解释一下是什么导致了这种情况(我能做点什么吗)?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-14 06:24:15

序列可能是一个相当大的瓶颈,特别是当多个会话/线程同时使用它们时。

要改进这一点,您可以做的主要事情是增加缓存的序列值的数量:ALTER SEQUENCE CACHE n,用一个大于20 (默认值)的值替换n。我建议将其设置得更高,因为您将在一条语句中使用许多或所有序列值。你可以达到(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)的高度。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3927785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档