테이블마다 시퀀스 객체를 만들지 말고,
하나의 시퀀스를 만들어서 공유하면 안 될까?
일단 테이블의 pk 컬럼이 insert 순서대로 증분 값을 정확히 1씩 가져가지 않아도 된다는 전제로 포스팅합니다.
테이블을 새롭게 생성하면서 PK에 해당하는 컬럼에는 대부분 시퀀스 객체의 nexval을 insert 해줍니다.
그러다 문득 이와 같은 궁금증이 생기게 되어 포스팅하게 되었습니다.
테이블마다 시퀀스 객체를 왜 하나씩 만들어주지? 그냥 시퀀스 하나로 공유해서 쓰면 안 되나?
일단 결론은 그리 추천하지 않는 방법입니다.
원칙적으로 안되는건 아니나, 지양하는 것이 맞겠죠.
여러 세션에서 시퀀스의 nextval을 호출하게되면 순차적으로 nextval을 제공합니다. (시퀀스의 cache 옵션은 일단 배제하겠습니다.) 세션들은 순서대로 nextval을 받기를 기다리겠죠. (delay)
문제는 여러 테이블에 insert할 때마다 시퀀스를 호출할 테니 시퀀스 객체 호출 빈도가 더 높아지는 겁니다. 그럼 시퀀스의 nextval을 얻기 위해 delay중인 트랜잭션이 더 많아질 겁니다.
시퀀스가 인기가 많아지는 겁니다. 시퀀스는 몸은 하난데 부르는 데가 많으니 다들 차례를 기다려야죠.
따라서 트랜잭션에서 delay를 감수해서라도 굳이 시퀀스를 하나만 가지고 공유해야 할 필요가 없죠.
이는 시퀀스의 캐쉬옵션으로도 해결이 안 될 수 있습니다. 많이 쓰는 만큼 캐시 사이즈를 늘리면 안 되나? 많이 쓰이는 만큼 cache size를 10000으로 설정해둔다면 어떨까요? 메모리에 10000개의 시퀀스 value를 올리는 겁니다. 디비 메모리 사양이 충분하다면 상관없겠네요.
배보다 배꼽이 커지는 거 같습니다. delay에 대비하여 캐시를 더 많이 하면 할수록 메모리에 공간을 더 많이 차지합니다.
그냥 시퀀스 하나 더 만드는게 나은 거죠.
참고
https://asktom.oracle.com/pls/apex/f?p=100:11:103287440177936::::P11_QUESTION_ID:2985886242221
'Programming > Database System' 카테고리의 다른 글
SQL (2) - 데이터 검색, SELECT (0) | 2022.04.04 |
---|---|
SQL (1) - 데이터베이스 객체와 DDL, DML (0) | 2022.03.23 |
관계형 모델 (0) | 2022.03.22 |
모델링, ER 모델 (0) | 2022.02.22 |
데이터베이스 (DB)의 이해 (1) | 2022.02.18 |
댓글