• oracle序列中cache和nocache


    首先我这篇博客的内容是我不知道oracle里的 cache 是什么,结果越查越多。。。

    “序列的cache通常为 20,但在需要依据序列值判断创建的先后顺序时必须是 NOCACHE”,关于这句话,是公司的数据库规范里提到的一句话,但是我感觉nocache会导致的问题好像还不少,所以我很纠结,但是除了根据序列值判断创建的先后顺序外,还有其他的靠谱的方式来判断先后顺序吗?难道入库时间不可以吗?为什么非要用序列值?

    好,上面的废话可以先忽略。主要内容如下:

    create    sequence    name     
    increment    by    x    //x为增长间隔     
    start    with      x    //x为初始值     
    maxvalue          x    //x为最大值       
    minvalue          x    //x为最小值     
    cycle                 //循环使用,到达最大值或者最小值时,从新建立对象     
    cache             x    //制定存入缓存(也就是内存)序列值的个数  或者 nocache
    
    

    如:

    create sequence SEQ_ID  
    minvalue 1  
    maxvalue 99999999  
    start with 1  
    increment by 1  
    cache n  / nocache  --其中n代表一个整数,默认值为20
    order;
    
    

    序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主码值。一个序列的值是由特别的Oracle程序自动生成。
    如果不设定cycle循环的话,每一个序列号是唯一的。 当一个序列号生成时,序列是递增

    当使用到序列的事务发生回滚。会造成序列号不连续。

    cache的作用:当大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶颈。Oracle序列允许将序列提前生成 cache x个先存入内存,
    在发生大量申请序列语句时,可直接到运行最快的内存中去得到序列。但cache个数也不能设置太大,因为在数据库重启时,会清空内存信息,预存在内存中的序列会丢失,
    当数据库再次启动后,序列从上次内存中最大的序列号+1 开始存入cache x个。
    比如你的sequence中cache 100,那当你sequence取到90时突然断电,那么在你重启数据库后,sequence的值将从101开始。

    另外:
    如果指定NOCACHE值,Oracle就不会预先在内存里面存放Sequence。
    会产生的问题:创建nocache   sequence在高并发访问时,容易导致row cache lock等待事件,主要原因是每次获取nextval时都需要修改rowcache中的字典信息。使用nocache  sequence,还会导致如下问题:
    由于每次修改字典信息都需要commit,可能导致log file sync等待,nocache sequence在RAC环境下,会对基于sequence生成的列创建的索引造成实例间大量索引块争用
    基于以上问题,避免创建nocache sequence。

    什么是 log file sync等待事件,在一个提交(commit)十分频繁的数据库中,一般会出现log file sync等待事件,当这个等待事件出现在top5中,这个时侯我们需要针对log file sync等待事件进行优化,一定要尽快分析并解决问题,否则当log file sync等待时间从几毫秒直接到20几毫秒可能导致系统性能急剧下降,甚至会导致短暂的挂起。

    log file sync的原凶到底是什么?
    频繁commit/rollback或磁盘I/O有问题,大量物理读写争用

    参考的博客文章:
    https://www.cnblogs.com/jhlong/p/6069701.html
    https://blog.csdn.net/duanning397/article/details/7670302

    下面这篇博客里的内容对 log file sync等待事件做了很多解释,而且还提到了解决的办法。可以参考。
    http://www.cnblogs.com/iyoume2008/p/7691025.html

  • 相关阅读:
    StringBuffer
    判断java标识符
    基本数据类型和String相互转换
    使用String
    Properties属性文件
    Map排序
    java集合之三映射:HashMap、Hashtable、LinkedHashMap、TreeMap
    列表、集合与数组之间相互转换
    自定义列表排序
    ML-支持向量:SVM、SVC、SVR、SMO原理推导及实现
  • 原文地址:https://www.cnblogs.com/friday69/p/9999332.html
Copyright © 2020-2023  润新知