SQL/Oracle

[Oracle] 시퀀스(Sequence)를 이용한 글번호 매기기와 증가 이상

jane.dev 2021. 9. 17. 23:05
반응형

Oracle에서 시퀀스와 테이블을 생성함

CREATE SEQUENCE spe_num;

CREATE TABLE spe_tbl(
    bno NUMBER(10, 0) PRIMARY KEY,
    title VARCHAR2(200) NOT NULL,
    content VARCHAR2(2000) NOT NULL,
    writer VARCHAR2(50) NOT NULL,
    regdate DATE default SYSDATE,
    updatedate DATE default SYSDATE
);

 

Oracle에는 MySQL에서 자동으로 증가하는 번호인 AUTO_INCREMENT가 없기 때문에 SEQUENCE를 생성해서 사용

spe_num이라는 시퀀스에는 처음에 0이 저장됨

그리고 PRIMARY KEY가 들어갈 자리에 시퀀스명.nextval이라고 작성하면 실행시마다 1씩 증가된 새로운 값을 그 위치에 넣어줌

INSERT INTO spe_tbl (bno, title, content, writer) 
	VALUES (spe_num.nextval, 'testtitle', 'testcontent', 'testwriter');

 

이렇게 여러번에 걸쳐 값을 넣다보니 20씩 증가해서 넣어지는 것을 발견함

 

→ 시퀀스에 cache 옵션이 선택되어있음

cache란 시퀀스 번호를 한번에 여러개씩 메모리에 할당해 매번 시퀀스 번호를 생성하지 않으므로 속도도 증가시키고 CPU 사용도 줄임

SELECT SEQUENCE_NAME, CACHE_SIZE FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'SPE_NUM';

 

해당 시퀀스의 캐시 사이즈를 조회하니 20으로 되어있는 것을 확인

 

아래 구문을 사용해 캐시 옵션을 사용하지 않도록 설정이 가능하지만

빈번하게 INSERT되는 테이블의 경우, 과도한 CPU 사용을 불러올 수 있음

ALTER SEQUENCE SPE_NUM NOCACHE;