首页 > 数据库 >Oracle 18c-可伸缩序列(Scalable Sequence)

Oracle 18c-可伸缩序列(Scalable Sequence)

时间:2022-09-29 12:08:33浏览次数:88  
标签:18c 伸缩 Sequence lei sequence Scalable SQL 序列 select


说明

在18c之前的版本中对于序列的使用,存在着对同一个序列争用的情况,特别是对于RAC这种高并发的环境中争用序列情况更是容易发生。针对这种情况,Oracle退出了可伸缩序列,大大减少了序列和所在索引的争用,并提供了更好的数据负载可伸缩性。而对于单实例也同样有用。

创建可伸缩序列

  • 语法
    通过加SCALE关键字就可以创建可伸缩序列
CREATE | ALTER SEQUENCE sequence_name
...
SCALE [EXTEND | NOEXTEND] | NOSCALE
...

可伸缩序列=6位可伸缩序列偏移量数+正常的序列
6位可伸缩序列偏移量数=[(instance id % 100) + 100]+[会话ID % 1000]

  • EXTEND
    表示序列总长度=[X个数字+Y个数字],X默认值是6位数,Y是MAXVALUE指定的位数。
  • NOEXTEND
    表示序列总长度不能超过MAXVALUE定义的长度,由于前面默认是6位数+正常的序列号,所以长度最少是7位数。

实验

创建EXTEND类型的可伸缩序列

  • 查看会话ID和实例号
SQL> select sys_context('userenv','sid') from dual;
SYS_CONTEXT('USERENV','SID')
--------------------------------------------------------------------------------
69

SQL> select instance_number from v$instance;
INSTANCE_NUMBER
---------------
1
  • 创建序列
SQL> create sequence lei_seq start with 1 increment by 1 minvalue 1 maxvalue 100 scale extend;

Sequence created.
  • 查看序列值
SQL> select lei_seq.nextval from dual;
NEXTVAL
-----------------------
101069001 = 101+069+001
  • 再开一个会话查看序列值
    会话ID不同,生成的序列肯定不会相同,但是最后3位是依次增长的。
SQL>  select sys_context('userenv','sid') from dual;

SYS_CONTEXT('USERENV','SID')
--------------------------------------------------------------------------------
101

SQL> select lei_seq.nextval from dual;
NEXTVAL
----------
101101002

创建NOEXTEND类型的可伸缩序列

SQL> create sequence lei_seq2 start with 1 increment by 1 minvalue 1 maxvalue 100 scale noextend;

Sequence created.



SQL> select lei_seq2.nextval from dual;

select lei_seq2.nextval from dual

*

ERROR at line 1:

ORA-64603: NEXTVAL cannot be instantiated for LEI_SEQ2. Widen the sequence by 4

digits or alter sequence with SCALE EXTEND.

可以看到报错了序列无法实例化,提示要么去掉maxvalue参数,要么使用extend。

错误原因很简单,因为noextend的可伸缩序列最少要7位数。

修改可以修改maxvalue为1000000即可,也就是6位数+1,一直增长到9就无法增长了,因为增长到10就会超过7位数。证明如下:

SQL> alter sequence lei_seq2 maxvalue 1000000;
Sequence altered.

重复执行几次

SQL> select lei_seq2.nextval from dual;
NEXTVAL
----------
1011011

SQL> /
NEXTVAL
----------
1011018

SQL> /
NEXTVAL
----------
1011019

SQL> /
select lei_seq2.nextval from dual
*
ERROR at line 1: --可以看到超过9就报错了,因为序列总长度超过了7位。
ORA-64603: NEXTVAL cannot be instantiated for LEI_SEQ2. Widen the sequence by 1
digits or alter sequence with SCALE EXTEND.

总结

对于可伸缩序列来说EXTEND和NOEXTEND没有本质区别,MAXVALUE代表的含义有所不同。

  • 对于EXTEND来说MAXVALUE代表的后面正常序列的长度,而不是可伸缩序列的总长度。
  • 对于NOEXTED来说MAXVALUE代表的是可伸缩序列的总长度。

注:Oracle建议对于可伸缩序列不要使用排序,因为它本身就是无序的。

参考连接:

​https://docs.oracle.com/en/database/oracle/oracle-database/18/admin/managing-views-sequences-and-synonyms.html#GUID-76663C84-D792-46A3-A25A-03C49DED71AD​


标签:18c,伸缩,Sequence,lei,sequence,Scalable,SQL,序列,select
From: https://blog.51cto.com/u_12946336/5722418

相关文章

  • AWR报告分析利器 ---兼容10g,11g,12c,18c,19c
    介绍本工具是用Python开发,通过解析并分析AWR报告生成Markdown文本格式。给出AWR报告可能存在的性能问题,参数设置等建议。对于阅读AWR报告不熟悉的同学非常适用示例:链接:​​h......
  • Oracle体系结构_18c_Architecture
    有图有真相,一张图看清Oracle数据库体系结构。这个是18c版本。期待19c和21c的版本发布出来。=========================================================================......
  • ABC 241D - Sequence Query(multiset)
    newknowledge(stl)multiset位于库中,可以看成一个序列,插入一个数,删除一个数都可以在O(logn)的时间内完成,能时刻保证序列中的数是有序的,而且序列中可以存在重复的数。h......
  • Idea插件SequenceDiagram快速查看方法调用
    Idea打开setting->plugins安装插件SequenceDiagram快速查看方法调用在方法名上右键点击SequenceDiagram即可生成方法调用图最上面一行为该方法涉及的类名,下面的白色字......
  • CF718C Sasha and Array
    CF718CSashaandArray题目大意在本题中,我们用\(f_i\)来表示第\(i\)个斐波那契数(\(f_1=f_2=1,f_i=f_{i-1}+f_{i-2}(i\ge3)\))。给定一个\(n\)个数的序列\(a\)......
  • CF 1720 D1. Xor-Subsequence (easy version)
    传送门:Xor-Subsequence(easyversion)思路:这个问题的描述类似最长不降子序列,不难想到可以设\(dp[i]\)为以\(a[i]\)结尾的最长子序列,进而得到递推方程:\[dp[i]=ma......
  • 子序列的和(subsequence)
    【题目描述】输入两个正整数n和m,(n<m<106),输出1/n2+1/(n+1)2+...+1/m2,保留5位小数。输出包含多组数据,结束标记为n=m=0。提示:本题有陷阱。【样例输入】24 ......
  • PostgreSQL重置所有Sequence启始值
    目录适用范围方案概述实施步骤1.sequence为表自增主键2.sequence不是表的自增主键适用范围pg12+方案概述在从ORACLE迁移到PG的过程中,当导入数据后,在启动应用时,Sequenc......
  • [uvm sequence专题] objection in sequence (sequence中objection的用法以及UVM1.1d 1
    objectioninsequence(sequence中objection的用法以及UVM1.1d1.2的区别)1前言在UVM中,除了在各个taskphase中会出现控制objection的情况,在defaultsequence的执行中......
  • CF438D The Child and Sequence
    CF438DTheChildandSequence洛谷链接同一个思路AC四道题太爽了题目大意:区间求和,区间取模,单点修改。分析:难点在于区间取模很难实现标记下传以及合并。思路和线段......