oracle rac一个节点执行语句很慢_由点及面了解Oracle的Sequence序列

本文深入探讨了Oracle Sequence,包括其基本概念、潜在的性能问题及其解决方案。在RAC环境下,nocache和order选项可能导致性能下降,如GC等待事件。为解决这些问题,文章提出智能主键策略,利用实例号、进程号和序列值避免实例间传输和索引争用。此外,18c的SCALE功能提供了内置的智能主键解决方案。最后,分享了在开发中使用Sequence的经验,如通过jdbc高效读取新插入的Sequence值。
摘要由CSDN通过智能技术生成
点击标题下「蓝色微信名」可快速关注

预计阅读时间:22分钟

50bbc8203ecd57ad9bd41e2287eb2e1b.png

sequence作为Oracle一个非常普通的对象,在实际设计和开发的过程中,还是有些知识,以及细节,值得总结和注意,下面我会从四个方面,展开介绍,

1. sequence基本介绍

2. sequence性能问题

3. 18c的sequence新特性

4. 一些开发中sequence的使用经验

1. sequence基本介绍

下图是11g的《Reference》,对于create sequence语法的介绍,

5a8ae1c3bd5e374ccf8acf1d4d15bd17.png

可以知道,sequence有一系列参数,可以辅助序列的创建,实现各种需求,

INCREMENT BY:步长,不能为0,正值最大28位,表示升序,负值最大27位,表示降序。该参数的绝对值,必须小于MAXVALUE和MINVALUE之差。默认值为1。
START WITH:起始值,对于降序序列,默认值为序列的最大值,对于升序序列,默认值为序列的最小值。
MAXVALUE:最大值,正值最大28位,负值最大27位,MAXVALUE >= START WITH,MINVALUE > MAXVALUE。
NOMAXVALUE:对于升序序列,最⼤值为1028-1,对于降序序列,最⼤值为-1,该参数为默认值。
MINVALUE:最小值,正值最大28位,负值最大27位,MINVALUE <= START WITH,MINVALUE < MAXVALUE。
NOMINVALUE:对于升序序列,最小值为1,对于降序序列,最小值为-(1027 -1),该参数为默认值。
CYCLE:表示序列值到达最⼤或最⼩值后继续循环生成新值。
NOCYCLE:表示序列值到达最大或最小值后不会生成新值,该参数为默认值。
CACHE:表示在内存中缓存多少个序列值,最大28位,最小值为2,对于CYCLE=Y的序列,CACHE的值必须小于循环的序列值,CACHE允许的最大值必须小于如下公式:CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)如果数据库崩溃,还未提交的缓存序列,就会丢失。RAC下建议使用cache选项。
NOCACHE:不缓存序列值,如果不指定CACHE和NOCACHE,默认缓存20个的序列值。
ORDER:表示序列会按照请求的顺序,生成序列值,如果使用序列,作为时间戳,则此参数有用,但若作为主键,未必需要保证序列的顺序。如果用的RAC,ORDER是唯一可以保证按序创建序列值的方法,除此之外,序列都是按序产生的。
NOORDER:不需要保证序列按序创建,这是默认配置。

通常我们创建一个序列,会包含这些常用的参数,

36a795145f55cc3d82d2610b7f245ff5.png

要了解sequence背后,Oracle做了什么,可以执行10046事件,例如执行create sequence bisal_seq语句,10046的trace记录如下,会向seq$插入记录,从字段名称可以看出,存储的是sequence相应的参数值,

7994ab7399223e2a80597ea7dd6d5ec5.png

同样检索seq$,可以和上述trace对应起来,

fe0696d29f28d53ccbda7f6c3416c285.png

同时,会向obj$插入一条对象的记录,标记序列对象,

74a6564ea27306ea9c2af7ae06bf81fb.png

执行检索select bisal_seq.currval, bisal_seq.nextval from dual语句,会更新seq$,主要更新highwater高水位,因为序列要保证值唯一,

c3023c35f5d22c5b42f389c95863f485.png

创建序列,不带任何参数,默认参数值如下,

4081b53a250eb40841b1cada836a2506.png

问题1:cache存储的是什么?

有些人可能认为存储的是1,2,3...20,但实际存储的是目标值,例如20,其他值存储在缓存中。

问题2&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值