gpt4 book ai didi

Oracle selectsequence.nextval from Dual 听起来太慢

转载 作者:行者123 更新时间:2023-12-02 09:30:27 24 4
gpt4 key购买 nike

不久前,我在使用jdbc插入/更新数百万条记录时遇到了数据库性能问题。为了提高性能,我更改了代码以使用batch。然后我决定使用 jprofiler 监控代码以了解性能提高了多少......但同时监控我发现了一个奇怪的事情!

enter image description here

从上面的截图中可以看出,从序列生成新的 id 非常慢。屏幕截图非常具有描述性,我必须说第二行是对一个包含约 800 万条记录的表的内连接查询,其本身和一些计算(将其时间与第三个查询的时间进行比较!)。

我向我们的 dba 询问了这个问题,他说了一些关于缓存序列的 Oracle 建议,但当我检查序列时,我发现它已经被缓存了。

CREATE SEQUENCE  "XXXXXXXXXXXX_ID_SEQ"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE;

有什么想法吗?

附:我认为 Hibenate 类似地使用序列来插入记录,实际上我正在寻找使用序列的最佳实践来提高使用 hibernate 的项目的性能。以上jdbc任务终止。

最佳答案

正如其他人的评论中所建议的那样 - 需要时间的不是数字的生成。考虑下面的示例 - 它消除了时间消耗中的网络和网络延迟。

SQL>  create sequence tst_seq start with 1 increment by 1; 

Sequence created.

SQL> set timing on
SQL> declare
seqNo number(38,0);
begin
loop
select tst_seq.nextval into seqNo from dual;
exit when seqNo>=100000;
end loop;
end; 2 3 4 5 6 7 8
9 /

PL/SQL procedure successfully completed.

Elapsed: 00:00:05.86

在没有缓存的情况下,生成 100.000 个数字需要 5.86 秒。如果您重现上面的测试,您将得到一个简短的估计,如果您更改实现以消除序列号的额外往返,您可以实现什么目标

关于Oracle selectsequence.nextval from Dual 听起来太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54059604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com