序列有四种组合:

a. CACHE + NOORDER
b. CACHE + ORDER
c. NOCACHE + NOORDER
d. NOCACHE + ORDER
即使在单例配置下,当有大量的sequence需要产生的时候,性能压力和存储sequence值的行锁定代价相关。
NOCACHE与CACHE的性能
      当使用cache时,dictionary cache(row cache)仅仅当出现新的水位线时才会更新一次。例如当cache是20,nextval第一次请求时,dictionary cache中的sequence的row cache值改变,增加20。DBA_SEQUENCES的LAST_NUMBER字段以cache值或20增加。抽取出存储于shared pool的20值,将会分配给请求nextval的session。v$_sequences(这个表应该不是Oracle官方提出的)允许知道sequence是否已经被缓存于shared pool中。

      当不使用cache时,dictionary cache不得不对于任何nextval请求都有进行一次更新。意味着row cache不得不随着每次nextval的请求被锁定和更新。多个session同时请求一个nextval因此将会被block在一个’row cache lock'等待中。
      当使用cache+order和RAC(cluster_database=true)时,需要使用序列中nextval的session需要得到一个排它实例SV锁,在shared pool中插入或更新序列值之前。当多个session同时需要同一个序列时,一些session将会等待'DFS lock handle'等待事件。

      因为这些序列化机制的结果,整个序列,例如可能以最快的速度增长一个序列,不会随着RAC节点的个数扩展,当序列没有cache+序列order/序列没有order。相比于没有cache的序列,cache的序列性能更好。
     由于非cache的order序列的序列化机制,序列的性能不会随着RAC节点个数扩展,例如性能不能提升。甚至性能会随着节点个数降低一些,例如因为要花费更多时间得到一个row cache锁或SQ入队列,特别是当参与更多节点时。但从1个节点扩展为2个节点时,性能降低的效果可见,从2个到3个时性能降低的效果也是可见的,但是当有更多的节点加入进来时则趋于平缓。


总结下,序列其实是有顺序的,只是默认是NOORDER,并行服务器才需要这种顺序,如果仅仅将序列作为主键不关注顺序那还好说。但使用序列也是有争抢的,因为要保证它的唯一性,所以对于并发量很大的系统可以采用CACHE,缓存一部分序列值,减少争抢,但同时需要冒着缓存丢失的风险,就像PCTFREE和PCTUSED这对参数一样,存在着不可调和的矛盾,找到一个平衡点才是关键。

最新文章

  1. 百度编辑器ueditor的简单使用
  2. 反人类的MyEclipse之-调整JavaScript代码-花括号换行显示
  3. 自制Unity小游戏TankHero-2D(3)开始玩起来
  4. JAVA导出pdf实例
  5. 移动开发下Xamarin VS PhoneGap
  6. C#项目代码规范
  7. 清理300多台MySQL数据库的过期binlog日志
  8. RHEL7安装配置TigerVNC
  9. baiduMap 显示所有的marker(在视野里显示所有的)
  10. EventStore的设计思路
  11. Java 反射 Method的invoke回调调用任意方法
  12. springcloud
  13. lunx中部分命令总结
  14. Spring的IOC注解开发入门1
  15. c++中sizeof的理解
  16. nginx指定文件路径有两种方式root和alias
  17. 工业以太网EtherNet/IP协议安全分析整理
  18. 分布式服务注册中心XXL-REGISTRY
  19. dbdeployer安装TokuDB MySQL
  20. 尝试解决nginx的499错误1

热门文章

  1. Windows下安装使用curl命令
  2. 转:Dynamic Binding Of RDLC To ReportViewer
  3. javac命令详解(下)
  4. 什么是FastCGI?
  5. openssl 生成CSR
  6. 安装Oracle11后在SQL Developer启动时提示:enter the full pathname for the java.exe
  7. ARCGIS接口详细说明
  8. 2014年1月9日 Oracle 内存与结构
  9. HDU 5768 - Lucky7
  10. 【典型错误】The type java.lang.Object cannot be resolved.