[Oracle] DB Buffer Cache

·2025년 8월 20일

오라클 관리

목록 보기
14/163


이론1. db buffer cache의 역할

💡

  • data file에서 읽은 데이터 블럭을 올리는 메모리 영역
  • 이 영역에 데이터 블럭을 올리면 다음번에 똑같은 데이터의 요청이 들어오면 메모리에서 바로 데이터를 보여줄 수 있음

이론2. 아래의 SQL이 처리되는 과정을 버퍼캐쉬를 기준으로 설명하세요


이론3. db buffer cache 를 효율적으로 사용하기 위한 알고리즘?

💡 LRU(Least Recent Use) 알고리즘


이론4. LRU(Least Recent Use)란?

select sal
from emp
where ename='SCOTT';

  1. 인덱스 스캔 : single block i/o 가 발생 —→ MRU 로 올라감
  2. Full table 스캔 : multi block i/o 가 발생 —> LRU 로 올라감

만약 테이블이 nocache 속성이면 위와 같이 작동합니다.
그런데 테이블이 cache 속성이면 인덱스 스캔을 하든 full table scan을 하든 모두 MRU 로 올립니다.

dba가 이 내용을 알고 있어야하는 이유 ?

답: 우리 회사에 자주 엑세스하는 작은 테이블은 테이블의 cache 속성을 nocache 가 아니라 cache로 해주면 좋은 성능을 보입니다.


실습1. 테이블이 cache 속성인지 nocache 속성인지 확인하는 방법

select table_name, cache
 from user_tables;


실습2. emp 테이블을 너무나도 검색에 중요한 테이블이라 cache 속성으로 변경하시오

alter  table  emp  cache;
 
select table_name, cache
 from user_tables;

실습3. 위의 작업은 dba만이 할 수 있습니다. dba가 아닌 일반 개발자가 위의 cache 속성을 사용해서 SQL을 검색하려면?

alter  table emp nocache;

select /*+ cache */ sal
 from emp
 where ename='SCOTT';

📌 테이블의 cache 속성 2가지

  1. nocache : index scan 을 하면 MRU 로 블럭을 올리고
    full table scan 을 하게 되면 LRU 쪽에 블럭을 올리는 속성
  2. cache : index scan 을 하든 full table scan 을 하든 모두 MRU 로 올리는 속성

💡 OCP시험문제. 어떤 테이블을 cache 속성으로 변경해야하는가?

답: 작고 자주 엑세스하는 테이블


문제. hr 이 가지고 있는 모든 테이블들을 전부 cache 속성으로 변경하시오

alter table hr.employees cache;
alter table hr.countries cache;
alter table hr.regions cache;
alter table hr.locations cache;
alter table hr.departments cache;
alter table hr.jobs cache;
alter table hr.job_history cache;

select table_name, cache
 from dba_tables
 where owner='HR';

0개의 댓글