Another Brain

[Oracle] 시퀀스(Sequence) 본문

P/SQL

[Oracle] 시퀀스(Sequence)

뉸누나ㄴ나 2021. 9. 2. 00:48
CREATE SEQUENCE [이름]
INCREMENT BY [증감숫자] -- 양수면 증가 음수면 감소 기본 1
START WITH [시작숫자] -- 시작숫자의 최초 값은 증가일때 MINVALUE, 감소일때 MAXVALUE
MINVALUE [최솟값] 
MAXVALUE [최대값]
CYCLE OR NOCYCLE -- CYCLE : 최대값에 도달하면 최소값부터 다시 시작 /  NOCYCLE : 최대값 생성시 중지
CACHE [숫자, 생략가능] OR NOCACHE -- CACHE : 메모리에 시퀀스 값을 미리 할당 / NOCACHE 시퀀스값을 메로리에 할당하지 않음
ORDER OR NOORDER -- ORDER : 반드시 순차적으로 모두 채워서 시퀀스를 사용 / NOORDER : 시퀀스 값을 건너뛸 수 있음



CACHE 옵션을 사용하면 BUFFERS 영역에 시퀀스 값을 미리 띄어놓게되어 CPU 사용을 줄일 수 있다.

NOCACHE 사용시 BUFFERS 메모리는 절약할 수 있지만 시퀀스를 불러올때마다 CPU를 사용하게 된다.

즉, 빈번하게 INSERT하는 테이블의 경우 CPU의 과도한 사용을 불러오게 된다. (CACHE에 올려놓는게 훨씬 효율적)


NOORDER 옵션을 사용할 경우 시퀀스 값을 건너뛸 수 있다.

이것이 가능한 이유는 DB INSTANCE가 여러개일 경우 (RAC : Real Application Cluster 구성시)

각각의 INSTANCE는 동일한 시퀀스를 동시에 부를 수 있고 이 경우 상황에 따라 시퀀스가 건너뛰어지는 일이 생길 수 있다. (Ex> DB 1호기랑 DB 2호기가 같은 시퀀스를 동시에 불러서 NEXTVAL을 부르고 COMMIT은 안 하는 상황 등)

순차적으로 모든 숫자가 빠짐이 없어야할 경우 ORDER 옵션을 넣어야 RAC 구성에서 시퀀스가 빠짐없이 순서를 지킬 수 있다.

Comments