oracle sequence는 순차적으로 특정 interval로 번호를 부여해 주는 object 입니다. 
sequence 생성시 cache option을 줄수 있는데, 이는 지정한 갯수의 sequence를 미리 일정 부분 생성해 library cache영역에 저장해 두는 기능을 합니다. cache option을 사용하지 않을 경우 매번 next value를 참조할 때 disk I/O를 발생하게 됩니다. 또 sequence관련 row cache lock이 발생하는 경우도 있죠.
이러한 현상을 완화 시키기 위해 자주 사용되는 sequence에 대해서는 cache 기능을 부여하게됩니다.
alter sequence seq cache 100;
그러나 sequence 생성시 cache 기능을 사용할 경우  "cache aging out"과 "db re-start" event로 인해 sequence number가 skip 될 수 있습니다. 더구나 sequence cache는 oracle 7.2 이전엔 row cache에 저장되었으나 7.3 이후 library cache에 저장되어 더 자주 aging-out 현상이 발생하게 됩니다.
이러한 현상을 최소화하기 위해 sequence를 pining 할 수 있습니다. sequence pin은 (물론 다른 object도 마찬가지지만) dbms_shared_pool package의 keep procedure를 이용할 수 있습니다. 이 package는 default로 설치되지 않으며, dbmspool.sql 수행으로 설치 할 수 있습니다.
dbms_shared_pool.keep('seq', 'Q').
참조 : oracle metalink Note 62002.1 Caching Oracle Sequences



+ Recent posts