Oracle:sequence问题研究
一直以来,以为sequence是不间断地持续增长的;但今天发现sequence是会跳号,这种情况发生在RAC环境下。在单实例环境下,应该不存在的。
sequence截图如下:
数据库表中发生了跳号:
查看了实例db1:
查看了实例db2:
通过pl/sql查看nextval
从上面我们知道,在RAC环境下,sequence确实会发生跳号现象。但不管如何,sequence是不会重复的。
下面是从网上查找的深层次原因:
oracle为了在rac环境下为了sequence的一致性,使用了三种锁:row cache lock、SQ锁、SV锁。
row cache lock的目的是在sequence指定nocache的情况下调用sequence.nextval过程中保证序列的顺序性;
SQ锁是应用于指定了cache+noorder的情况下调用sequence.nextval过程中。
SV锁(dfs lock handel) 是调用sequence.nextval期间拥有的锁。前提是创建sequence时指定了cache 和order属性 (cache+order)。
order参数的目的是为了在RAC上节点之间生成sequence的顺序得到保障。
创建sequence赋予的cache值较小时,有enq:sq-contention等待增加的趋势。
cache的缺省值是20.因此创建并发访问多的sequence时,cacheh值应取大一些。否则会发生enq:sq-contention等待事件。
rac上创建sequence时,如果指定了cache大小而赋予noorder属性,则各节点将会把不同范围的sequence值cache到内存上。若两个节点之间都必须通过依次递增方式使用sequence,必须赋予如下的order属性(一般不需要这样做)"sql> create sequence seq_b cache 100 order"。如果是已赋予了cache+order属性的sequence,oracle使用SV锁进行同步。SV锁争用问题发生时的解决方法与sq锁的情况相同,就是将cache 值进行适当调整。
最新文章
- 代码的坏味道(11)——霰弹式修改(Shotgun Surgery)
- Twitter面试题蓄水池蓄水量算法(原创 JS版,以后可能会补上C#的)
- 基于Netbeans的PHPUnit单元测试环境搭建
- daydayup3 codeforces144C
- Jmeter模拟不同带宽
- web开发工具软件使用问题记录
- JAVA里面的IO流(一)分类2(节点流和处理流及构造方法概要)
- 【转】JavaScript中undefined与null的区别
- Android导入Cocos2D的Sample项目
- java学习多线程之生产者消费者
- 保留你的dSYM文件
- WPF中当鼠标移到按钮上时,按钮的背景图片消失的问题
- a href=";javascript:void(0)"; 是什么意思?加不加上有什么区别?
- Python 的装饰器
- windows下网络编程UDP
- 【原创】大数据基础之CM5(Cloudera Manager)+CDH5离线安装
- c# 线程锁 ,
- C++11 并发指南四(<;future>; 详解一 std::promise 介绍)
- 使用paramiko远程执行命令、下发文件
- spring配置redis注解缓存
热门文章
- LeetCode OJ--Remove Duplicates from Sorted List II *
- 发布npm包
- NOIPSB评测机+SB题DAY2
- 用canal监控binlog并实现mysql定制同步数据的功能
- java之 ------ 文件的输入、输出(一)
- MFC 小知识总结三
- C#中使用byte[]数据,生成Bitmap
- PJzhang:python基础入门的7个疗程-two
- 走入asp.net mvc不归路:[3]创建控制器
- 我所见过的最简短、最灵活的javascript日期转字符串工具函数