이거 맘대로 되는 세상이 아니구만...

[오라클 시퀀스] 시퀀스 cache size에 설정할 때 한번 생각하자 본문

Oracle

[오라클 시퀀스] 시퀀스 cache size에 설정할 때 한번 생각하자

바이홍 2013. 1. 16. 11:46
반응형

아는 것이 힘이다.가 아니라

요즘은 잘 찾아내는 것이 힘이다는 생각이 드네요.

 

이번에 오라클 시퀀스 Cache Size를 일괄적용한 적이 있었네요.

 

근데 시퀀스 체번이 1000씩 늘어나는 것 확인

 

꼭 1씩만 증가되어야 하는 로직이 였는데 문제가 발생이 되어서 오라클포럼에서 확인

 

원본 링크에여 https://kr.forums.oracle.com/forums/thread.jspa?threadID=463133

 

Sequence Cache

오라클 sequence를 사용할 때에 cache라는 옵션을 가지고 있다. 

이러한 옵션을 사용할때 가끔 수자가 이어지지 않고 끊어지는 경우가 발생할 수
있는데 여기서는 어떤 상황에서 수자가 없어지며 이러한 상황을 최소화할수 있는 
방법을 찾아보고자 한다. 

non-cache mode 인 경우에 'nextval' 을 요구하게 되면 current value에서 increment
만큼의 값이 증가될 것이다. 예를 들어 current value는 0이고 increment는 1이며 
cache가 아닐 때 'nextval'을 요구하게 되면 1이 return 될 것이다.

cache option과 같이 사용될 때 sequence에 대해서 'nextval'을 요구하게 되면
cache 되는 만큼의 값에서부터 차례대로 next 값을 가져오게 되며 cache된 값을 
모두 사용하고 난 다음은 다음 caching 을 하게 된다. 

만약 다음과 같이 sequence가 선언되었다고 하자. 

create sequence seq increment by 1 cache 5;

NUMBER SEQUENCE CACHE 
RETURNED CURRENT CURRENT 
start none 0 none 
1st access 1 5 1 
2nd access 2 5 2 
3rd access 3 5 3 
4th access 4 5 4 
5th access 5 5 5 
6th access 6 10 6 
7th access 7 10 7 

cache되어 있는 값들이 절대로 없어지지 않는다고 가정하면 출력되는 결과 값들은 
non-cache 의 그것과 다를 것이 없을 것이다. 

그러나 sequence cache도 역시 다른 cached information과 같이 shared pool 에 저장된다. 
이것은 다른 shared pool에 있는 procedure처럼 자주 access 되지 않으면 age out될 수 
있음을 의미하기도 한다. 또한 shutdown 시에는 cache에 있는 모든 것을 잃어버리게
된다. 여기서 주로 shutdown에 의해 sequence의 번호가 skip 될수 있으므로 skip되어서는 
안되는 번호를 가진 응용프로그램에서는 non-cached sequence 를 사용해야 한다. 
다음에는 cache age out과 shutdown이후에 sequence number의 변화를 예를 들어 설명한다. 

NUMBER SEQUENCE CACHE 
RETURNED CURRENT CURRENT 
start none 0 none 
1st access 1 5 1 
2nd access 2 5 2 
cache aged out 
3rd access 5 10 5 
4th access 6 10 6 
shutdown 
5th access 10 15 10 
6th access 11 15 11 
7th access 12 15 12 

aging 문제를 해결하기 위해서 7.3 이후에서 부터는 dbms_shared_pool 이라는 package 를 
이용해서 shared pool내에 다음과 같이 고정시켜 놓을수 있다.

dbms_shared_pool.keep('seq','Q');

Reference Documents

 

 

오라클  10g에서는 어떻게 변화가 되었는지 모르지만....

 

non-cached 옵션이 있는 것을 보면, 먼가가 있겠죠 ....

 

 

 

 

(.. )( ..) 스크랩은 자유
그러나 퍼간다는 매너는 필수 ㅇ.ㅇ
매너 없는 사람되지 맙시다!! ㅋ
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

반응형
Comments