Oracle Sequence中Cache与NoCache的区别
来源:互联网 发布:软件试用报告 编辑:程序博客网 时间:2024/05/18 06:36
转自:http://blog.csdn.net/duanning397/article/details/7670302
Oracle在创建序列(sequence)时有个参数你可以选择cache或者nocache,下面来讲一下两者的区别:
先来看下创建sequence的语句:
create sequence SEQ_ID
minvalue 1
maxvalue 99999999
start with 1
increment by 1
cache n / nocache --其中n代表一个整数,默认值为20
order;
如果指定CACHE值,Oracle就可以预先在内存里面放置一些Sequence,这样存取的快些。cache里面的取完后,Oracle自动再取一组到cache。使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的Sequence就会丢失。举个例子:比如你的sequence中cache 100,那当你sequence取到90时突然断电,那么在你重启数据库后,sequence的值将从101开始。
如果指定NOCACHE值,Oracle就不会预先在内存里面存放Sequence,当然这也就可以避免数据库不正常down掉的sequence丢失。不过会产生一些问题:创建nocache sequence在高并发访问时,容易导致row cache lock等待事件,主要原因是每次获取nextval时都需要修改rowcache中的字典信息。使用nocache sequence,还会导致如下问题:
由于每次修改字典信息都需要commit,可能导致log file sync等待,nocache sequence在RAC环境下,会对基于sequence生成的列创建的索引造成实例间大量索引块争用
基于以上问题,避免创建nocache sequence。
再来看看sequence相关保护机制:
row cache lock:在调用sequence.nextval情况下需要修改数据字典时发生,对应row cache lock事件
SQ lock:在内存缓存(并非rowcache)上获取sequence.nextval时发生,对应enq:SQ-contention事件
SV lock:RAC环境下获取cache+order属性的sequence.nextval时发生,对应DFS lock handle事件
什么情况下使用cache什么时间上使用nocache?
我个人感觉应该尽量使用cache,因为现在的数据库很多都是在高并发的情况下运行的,首先这样可以搞性能,并且也不会产生row cache lock等待事件。可能有些人会担心数据库不正常的down掉会产生序列号间断,但这也是很少的情况。当然如果你的业务要求是绝不能产生间断的序列号,那就要使用nochache了。
- Oracle Sequence中Cache与NoCache的区别
- Oracle Sequence中Cache与NoCache的区别
- Oracle Sequence中Cache与NoCache的区别
- Oracle Sequence中Cache与NoCache的区别
- 1oracle 自增长 2Oracle Sequence中Cache与NoCache的区别
- Oracle中Cache跟noCache的区别
- Oracle Sequence Nocache
- Oracle在创建序列(sequence)时有个参数你可以选择cache或者nocache
- 表cache/nocache
- Linux中buffer cache 与 page cache的区别
- Oracle SEQUENCE — cache 的用处
- oracle sequence cache
- oracle sequence cache 机制
- Oracle sequence cache简析
- Oracle Sequence Cache 参数说明
- Oracle Sequence Cache 参数说明
- Oracle Sequence Cache 参数说明
- Oracle Sequence Cache 参数说明
- java对象序列化
- Data 语意学---Data member的存取效率
- 黑马程序员—黑马历程--我的人生,我的路--黑九的我毕业了
- java 异常问题 No bean named 'sessionFactory' is defined 和 initialize a collection of role
- ASIHTTPRequest 对GET POST 请求简单封装
- Oracle Sequence中Cache与NoCache的区别
- 学生表sid,sname,成绩表cid,cname,学生成绩表sid,cid,cscore,要求输出特地考生最高成绩的课程名称
- nagios插件之监控f5主备状态(ssh实现)
- C++学习笔记9 C++新的关键字
- 黑马程序员—临近毕业,黑马四期徐同学11k就业发来的感谢信
- java获取cpu,内存,磁盘等信息
- 游戏性能规范的注意事项
- 让你的财务很清晰:个人财务三大报表
- 获得文件属性的函数调用实例