CS/DataBase

(ORACLE) 캐시와 공유 메모리

주누 2019. 11. 26. 23:21

캐시가 필요한 이유 

: 디스크 I/O의 접근을 최소화하기 위해서

 

 

그럼 캐시란 무엇인가?

"캐시는 메모리 이다."

캐시는 빈번하게 사용되는 데이터를 저장해두는 memory

 

이로인해 중복적이고 똑같은 데이터를 서칭할때 발생하는 비용을 막아줄 수 있다.

 


블록단위로 데이터를 관리하는 오라클 (버퍼캐시, 디스크 에)

최근 블록 한 개당 용량 : 8kb

 

 


프로세스는 캐시를 공유한다.

 

 

위와 같이 프로세스마다 버퍼캐시가 존재하는 것은 낭비이다.

또한 한 프로세스마다 각각의 버퍼캐시를 가지는 것은 각각의 저장소를 사용하는 것과 같으므로 서로의 데이터를 볼 수 없다.

 

이러한 단점을 보완하기 위해 탄생한 메모리가 

"공유메모리"

이다.

 

 

실제로는 LOCK이 존재하여 배타제어를 한다.

LOCK이 존재하는 이유는 동시에 같은 데이터를 변경할 때를 방지하기 위해서이다. 


버퍼 캐시를 정리하는 LRU 알고리즘

 

버퍼 캐시의 크기는 한정되어 있으므로 데이터를 관리할 필요성이 있음.

LRU알고리즘

: 최근에 사용하지 않은 데이터부터 버리는 알고리즘

 

읽어오는 것의 예시

 

그러면 디스크에 변경사항은 어떻게 기록할까?

서버프로세스는 데이터를 읽는 것만을 담당.

이는 백그라운드 서버의 일부인 DBWR가 담당한다.

 

 

잘 사용되지 않는 데이터는 버퍼 캐시는 어떻게 관리할까?

 

풀 스캔한 데이터를 예로들자면 풀 스캔한 대량의 데이터를 버퍼 캐시에 저장을 한다면 

버퍼캐시의 한정된 용량으로 인해 정작 자주쓰는 데이터에 대한 정보가 사라지기때문에 비효율적이라 판단!

 

그러므로 풀 스캔한 데이터는 저장하지 않는다.

 


그림으로 공부하는 오라클 구조
국내도서
저자 : 오다 케이지 / 이민재역
출판 : 제이펍 2015.09.10
상세보기