ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Oracle] 시퀀스 이모저모
    공부 이야기/ORACLE 2024. 5. 16. 23:09

    1. 자동으로 하나씩 증가하는 고유 값을 만들고 싶을 때 사용한다. 보통 채번이라고 한다.

    2. 별도의 채번 테이블을 만들거나 재조회를 통한 +1 방식으로 구현할 수 있지만 경합 문제가 발생할 수 있다.

    3. 동시에 여러 세션에서 접근하는 경우 발생한다.

    4. 오라클에서는 이를 최적화하기 위해 시퀀스 오브젝트를 사용한다.

    5. 별도의 테이블스페이스를 가지거나 조회 메커니즘 대신 내장 함수처럼 작동하는 것이다.

    6. 생성 함수 및 옵션은 다음과 같다.

     

    7. 추가로 SCALE, EXTEND, KEEP, GLOBAL, SESSION 이 있는데 다음과 같다.

    8. SCALE을 설명하기에 앞서 왜 등장했는지 배경부터 설명하면 다음과 같다.

    9. 다음 번호(+1)를 채번하는 시퀀스 특성상, B Tree의 맨 마지막 블록에 세션 경합이 집중될 수 밖에 없다.

    10. 맨 마지막 블록에 가장 큰 값이 쌓이기 때문이다.

    11. 리버스 인덱스를 통해서 순서를 뒤섞는 방식이 존재하지만 SCALE 옵션을 사용해도 비슷한 효과를 낼 수 있다.

    12. SCALE 옵션을 주면 DB 인스턴스 3자리 + 세션 3자리를 앞에 PREFIX로 가지게 된다. 

    13. 여러 개의 세션에서 동시에 시퀀스 호출을 해도 고유번호가 다르기 때문에 맨 마지막 블록에 집중되는 현상을 방지할 수 있다.

    14. RAC 환경에서는 DB 인스턴스 번호도 다르기 때문에 더 큰 분산 효과를 가질 수 있다.

    15. SCALE 옵션을 주면 PREFIX 6자리가 포함된다. 10자리 시퀀스를 준다고 하면, 앞 6자리를 차지하게 되는 것이다.

    16. EXTEND 옵션을 주면 PREFIX 6자리에 덧붙여서 16자리를 가지게 된다.

    17. KEEP은 CACHE랑 유사한데, CACHE는 시퀀스에 사용할 값을 미리 생성해놓는 방식이고 KEEP은 생성된 시퀀스 값을 메모리에 유지시키는데 그 차이가 있다.

    18. SESSION은 GLOBAL 옵션과 다르게, 데이터베이스 전역에서 사용하지 않고 세션별로 할당해서 시퀀스 값을 사용할 때 쓰는 옵션이다.

Designed by Tistory.