728x90
반응형
오라클 시퀀스 NEXTVAL(채번) 시 증가 값 이상할 경우
신규 테이블의 데이터 저장 모니터링 중 데이터에 저장되는 시퀀스의 값이 1씩 정상적으로 증가하지 않았습니다.
개발DB에서 테스트할 때는 정상적으로 1씩 증가함을 확인하였는데, 운영DB에서는 다르게 동작하고 있었던 것인데
이유는 아래와 같습니다.
발생 원인
1. 개발환경에서는 시퀀스 생성 시 캐시(Cache)를 nocache로 지정하여 생성 후 테스트를 하였습니다.
2. 운영환경에서는 DBA가 시퀀스 생성 시 시퀀스 캐시를 20으로 지정하여 생성하였습니다.
그렇다면 DBA는 시퀀스 캐시를 왜 지정해 주었고, 시퀀스 캐시가 하는 역할은 무엇일까?
간단히 정리하면 속도를 위해 사용합니다.
시퀀스 채번을 요청할 때마다 데이터 사전에 접근하는 게 아니라
캐시로 지정된 크기만큼 캐시 메모리(Library Cache)에 올려둔 뒤 사용하기 때문이라고 합니다.
참고 자료 : https://velog.io/@kimju0913/ORACLE-Sequence-Cache
속도에 도움도 되는 캐시인데 왜 이상이 생긴 거지?
[캐시를 사용하면 메모리 즉 Library Cache에 시퀀스 값을 올려두는 방식을 의미한다. ]
1. DB가 비정상적으로 종료되었다. - 종료될 때 캐시 메모리(Library Cache)가 소멸되므로
2. 사용빈도가 적어 캐시 메모리(Library Cache)에서 삭제되었다. (우선순위 밀림)
내 경우에는 DB가 정상적으로 종료된 적은 없었고,
새로 개발된 프로세스이고 아직 사용빈도가 적어 2번이 원인임으로 판단할 수 있었다.
참고자료 : https://doughman.tistory.com/11
결론
오라클의 시퀀스를 생성할 때는 캐시 생성 여부를 잘 판단해야 한다.
생성되는 시퀀스 값이 비즈니스 로직에서 중요한 역할을 하고, 반드시 1씩 채번이 되어야만 한다면 nocache로 생성
시퀀스는 로직 상 중요하지 않고 값의 PK용도로만 사용하거나 한다면 cache를 지정하여 속도에 도움을 줄 수 도있다.
나의 경우에는 비즈니스 로직에서 시퀀스가 중요한 역할을 하지는 않았기 때문에 캐시를 유지하기로 결정했다.
앞으로 시퀀스 생성 시에 비즈니스 로직을 고려하여 캐시 생성 여부를 잘 판단하자.
++ 추가
시퀀스 생성 시 CACHE/ NOCACHE 모두 생략하면 데이터베이스는 기본적으로 20개의 시퀀스 번호를 캐시한다고 하니 주의합시다.
https://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_6014.htm
모르는게 너무 많고, 실수도 많이 한다.
같은 실수를 반복하지 않게 노력하고, 실패와 경험을 통해 더 배우려고 해 보자.
728x90
반응형
'Oracle' 카테고리의 다른 글
[ORACLE] ORA-03113 : Merge 사용 시 에러 발생 (0) | 2022.04.20 |
---|---|
[Oracle] 테이블 생성 시간/정보 확인하기 (0) | 2022.03.26 |
[Oracle] PL/SQL 프로시저 내 테이블 권한 문제 (0) | 2021.10.18 |
PL/SQL Developer 한글 깨짐 현상 해결 (0) | 2021.10.04 |
[Oracle] ORA-00972 : 식별자가 너무 깁니다 (0) | 2021.10.04 |
댓글