DBA가 되고 싶은 비공자/SQLD 자격증

[ SQLD ] 오라클 캐시(Oracle Cache)에 대한 공부

차세대 IT 리더 비공자 2024. 6. 30. 20:21

 

 

안녕하세요, 차세대IT리더가 되고픈 비공자입니다.

오늘은 저번 시간에 오라클 시퀀스(SEQUENCE)를

생성 후, 테이블에 적용을 하여 사용해 보았습니다.

아직 캐시에 대해서 자세하게 알지 못하므로

캐시에 대해서 공부를 해보려고 합니다.

 

 

[ 오늘의 목차 ]

1. 오라클 캐시란?

2. 캐시를 왜 사용하는가?

3. 시퀀스 캐시의 문제발생 염려

 

 

 

1. 오라클 캐시란?

우선 오라클에서 캐시는 CACHE는 메모리에 할당된 캐시를 보관합니다.

예를 들어서 CACHE 20으로 SEQUENCE를 생성한다면

오라클에서는 CACHE를 20개의 미리 지정된 넘버를 가지고 있습니다.

 

캐시 설정 : CACHE 20 메모리에 미리 지정

캐시 사용 : SEQUENCE를 호출할 때마다 1 ~ 20까지 차례대로 사용

 

 

2. 캐시를 왜 사용하는가?

그렇다면 이제 캐시를 왜 사용하는지에 대해서

공부를 해볼려고 합니다. 캐시를 사용하는 이유는

웹 브라우저에서 고객이 1명씩 가입을 할 수 있지만,

실제로 엄청 큰 사이트는 같은 시, 분, 초에 여러 명의

고객들이 회원가입을 할 수 있습니다. 그렇다면

캐시를 20으로 설정한 뒤에 고객 20명이 회원가입을

한다면 캐시에 저장된 1 ~ 20까지의 번호를 각 고객들에게

차례대로 부여해줍니다.

위처럼 SELECT 시퀀스명.CURRVAL FROM DUAL;

또는 SELECT 시퀀스명.NEXTVAL FROM DUAL;

CURRVAL : 현재 시퀀스의 값

NEXTVAL : 다음 시퀀스의 호출 값 의미

 

 

 

3. 시퀀스 캐시의 문제발생 염려

시퀀스에 캐시를 설정하여 메모리에 캐싱된 숫자를

가져와 성능이 효율적일 수 있지만, 반대로 이로 인해

문제가 발생할 수 있습니다.

 

현재 TEST_SEQUENCE의 값"7"입니다.

여기서 아직 20까지의 메모리가 할당이 되지 않고

DB서버가 갑작스럽게 다운이 되거나 그렇다면

다음 호출 시퀀스의 번호는 어떻게 될까요?

우선 현재 도커에서 실행 중인 

ORACLE IMAGE서버를 중지를 해보겠습니다.

ORACLE IMAGE서버가 정상적으로 정지가 되었고

이제 다시 IMAGE서버를 작동시켜보도록 하겠습니다.

이제 다시 오라클과 DBEaver를 연동해 주도록 하겠습니다.

다시 TEST_SEQUENCE의 값을 조회하면

현재의 시퀀스의 값"7"에서 -> "21"로 변환이 되었습니다.

이러한 오류가 발생하는 이유는 아래와 같습니다.

 

DB를 중지시키거나 전원이 OFF 되는 경우,

메모리에 있던 번호가 삭제되기 때문에 이러한 증상이 발생된다.

즉, CACHE 옵션이 20개씩 시퀀스 번호를 생성하도록 설정

되어 있다면 한 번에 1부터 20까지의 시퀀스 번호를 생성한다.

이 상태에서 DB를 중지하고 재시작시키면 메모리에 있던

20번까지의 시퀀스가 삭제되고, 21번부터 40번까지 메모리에

시퀀스 번호가 저장되기 때문에 이런 경우에

1 -> 21, -> 41로 시퀀스 번호가 증가될 수 있다.

출처: https://denodo1.tistory.com/273 [dBack]

 

위와 같은 내용으로 시퀀스에 캐시를 적용하여 호출을 하게 된다면

디스크가 아닌 메모리에서 가져오기 때문에 성능은 훨씬 빠르지만,

안정성 있는 NUMBERING은 힘들 수도 있어서

캐시를 사용하지 않거나(NOCACHE) 또는 

DBMS_SHARED_PPL PACKAGE를 이용해 Libary Cache에

항상 상주하도록 강제 설정하는 방법이 있습니다.

출처 : http://blog.naver.com/xacti/80109572891

 

 

 

오늘은 ORACLE 시퀀스를 생성 후, 캐시를 설정할 때의

캐시에 대한 개념과 실제 적용, 캐시를 사용할 시 문제가

발생할 수 있는 원인에 대해서 공부를 해보았습니다.

캐시를 사용을 하기 위해서는 앞으로는 조금 더

신경을 써야 할 것 같습니다. 감사합니다.