首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Cache按顺序生成数字

问使用Cache按顺序生成数字
EN

Stack Overflow用户
提问于 2016-10-03 13:16:28
回答 1查看 752关注 0票数 1

我有一个用nocycle,noorder,cache 100和increment by 1创建的序列。我使用下面的SQL生成序列:

代码语言:javascript
复制
select myseq.nextVal from dual;

有了这个序列,我在一天内得到了206764957和206765478之间的值。几天后,当我再次使用这个过程时,它给了我206765361和206793474之间的值。

因此,在我的第一次运行中,最高的数字是206765478,在第二次运行中,最低的数字是206765361。我原以为第二轮的所有数字都会高于第一次运行时的所有数字,而不是它们的重叠。

你能帮忙找出这个序列的问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-03 14:19:43

从文件中:

阶 指定顺序,以确保按请求顺序生成序列号。如果您使用序列号作为时间戳,则此子句非常有用。对于用于生成主键的序列来说,保证顺序通常并不重要。 如果您正在使用Oracle实时应用程序集群,则订单只需要保证有序生成。如果您使用独占模式,则始终按顺序生成序列号。 NOORDER 如果不希望确保按请求顺序生成序列号,请指定NOORDER。这是默认的。

您已经指定了noorder,因此不能保证按请求的顺序生成序列编号。从您所看到的行为来看,假设您的断言没有修改序列是正确的,那么您似乎在使用RAC,并且看到了在RAC节点间实现缓存的方式的效果。

来自实际应用程序集群管理和部署指南

如果使用序列号,则始终使用带有NOORDER选项的缓存,以实现序列号生成中的最佳性能。但是,使用CACHE选项,您可能会在序列号中出现空白。如果您的环境不能容忍序列号间隙,那么使用NOCACHE选项或考虑预先生成序列号。如果您的应用程序需要序号排序,但可以容忍空白,那么在Oracle RAC中使用CACHE和ORDER来缓存和排序序列号。如果您的应用程序需要没有间隙的有序序列号,那么使用NOCACHE和ORDER。与其他缓存和排序组合相比,NOCACHE和ORDER组合对性能的影响最大。

如果试图使用序列来显示创建行的顺序,则可以使用order,但使用会让事情慢下来。使用时间戳列可能更可靠,尽管它受到操作系统支持的精度的限制,而且可能不是唯一的。

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

https://stackoverflow.com/questions/39832607

复制
相关文章

相似问题

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