현상
TAC 환경에서 NO ORDER + CACHE 옵션의 sequence 를 사용할 때 순서대로 채번되지 않는 현상이 발생합니다.
원인
TAC 환경에서 CACHE + NO ORDER 옵션일 때, node1 에서 cache 사이즈만큼 시퀀스를 뛰어넘은 후 node2 에서 할당된 캐시사이즈의 뒷 번호부터 시작하게 됩니다.
그로 인해 실질적으로는 순서대로 채번되지 않는 현상이 발생하게 됩니다.
1. NO ORDER 옵션에서 sequence 생성
CREATE SEQUENCE NO_ORDER
INCREMENT BY 1
START WITH 1
NOMAXVALUE
MINVALUE 1
NOCYCLE
CACHE 5
NOORDER ;
SQL
복사
2. 조회 결과
NODE 1에서 NODE2 에 할당된 CACHE 값을 넘는 수 만큼 select NO_ORDER.nextval from dual; 조회 시 순서대로 채번되지 않는 것 확인 가능합니다.
SQL> select NO_ORDER.nextval from dual;
NEXTVAL
1
1 row selected.
SQL> select NO_ORDER.nextval from dual;
NEXTVAL
2
1 row selected.
SQL> select NO_ORDER.nextval from dual;
NEXTVAL
5
1 row selected.
SQL> select NO_ORDER.nextval from dual;
NEXTVAL
11
1 row selected.
SQL
복사
해결
ORDER 옵션을 주었을 때는, 다른 노드에게 캐시 사이즈만큼 할당된 번호로 올라가지 않고 순차적으로 채번됩니다.
참고
order 옵션 사용 시 부하가 발생할 수 있습니다. 사이트 환경에 맞게 CACHE, ORDER/NO ORDER 옵션을 사용하는 것을 권고합니다.