Oracle Sequence总结
参考MOS:
RAC and Sequences (文档 ID 853652.1)
Caching Oracle Sequences (文档 ID 62002.1)
1、sequence cache 跳号的几种情况
1.1、sequence cache存储在shared_pool的library cache中,当cache的sequence长时间不用,
library cache会根据lru最近最久未使用算法将sequence cache清理出去,这叫做sequence cache aging out,
这会导致sequence的跳号现象。
1.2、当sequence未使用keep cache时,通过flush shared_pool的方式,同样会达到将sequence cache
清理出library cache的作用,导致sequence出现跳号的现象。
1.3、特定的ora-600错误也会导致sequence cache失效出现跳号情况。
1.4、实例的重启会导致sequence cache失效出现跳号情况。
1.5、事务用到了sequence,并且大量回滚的情况下,也会出现gap的情况。
2、sequence 的cache、nocache、order、noorder属性总结
2.1、cache+noorder
这种属性设置是RAC最佳性能配置,不指定任何属性的情况下,RAC会默认使用这种配置,cache默认20;
对sequence没有强制的order要求,并且频繁使用sequence的情况下,建议cache值调整为1000~2000;
若不频繁使用sequence,但希望尽量不出现sequence跳号的情况,可以保持cache值为20,或者将sequence
放入keep cache中,让sequence常驻内存,不会被flush、aving out出去。
2.2、cache+order
若应用有要求sequence需要强制order,则该sequence必须这是为cache属性,否则性能会很差,order的情况下,
sequence也会由于flush、instance shutdown等情况出现gap跳号,同样可以采用keep的方式让sequence常驻内存。
2.3、nocache+noorder
性能仅优于 nocache+order,不推荐使用
2.4、nocache+order
性能最差的sequence属性组合,不会出现sequence的gap,强制order,不推荐使用。
默认情况下dbms_shared_pool包是不在系统中的,需要运行$ORACLE_HOME/rdbms/admin/dbmspool.sql进行创建
创建dbms_shared_pool,创建后,只有sys能够调用该包,若需要其他用户调用,则需要单独赋权
@?/rdbms/admin/dbmspool.sql
赋权:grant execute on dbms_shared_pool to cismon;
keep sequence 让指定sequence常驻内存:A为sequence名称,Q为关键词,代表sequence
exec dbms_shared_pool.keep('A','Q');
解除指定sequence的常驻内存:
exec dbms_shared_pool.unkeep('A','Q');
本文来自博客园,作者:Eddie小陈,转载请注明原文链接:https://www.cnblogs.com/orachen/p/15878852.html