메뉴 건너뛰기

bysql.net

7._Result_캐시

2012.05.27 20:14

운영자 조회 수:4142

  • Result 캐시는 Shared Pool 에 위치
  • 시스템 I/O 발생량을 최소화
  • 한번 수행한 Query 또는 PL/SQL 함수의 결과 값을 저장 (11g 이상)
  • Result 캐쉬 영역
    • SQL Query Result 캐시
    • PL/SQL  함수 Result 캐시
  • 관련 Parameter 

구분 

기본값 

설명 

Result_cache_mode 

manual 

Result Cache  등록방식을 결정

  • manual : result_cache 힌트를 명시한 SQL만 등록
  • force : no_result_cache  힌트를 명시하지 않은 모든 SQL을 등록 

 result_cache_max_size

 N/A

 SGA 내 Result_cache가 사용할 총 량(Bytes)

  • 0 => reslt 기능 작동안함
  • N/A => 오라클이 관리 (최대 Shared pool 의 75% 가 넘지 않게 함)
    • memory_target * 0.25%
    • sga_target * 0.5%
    • shared_pool_size수동 관리시 => shared_pool_size * 1%  

 result_cache_max_result

5

 하나의 SQL결과 집합이 전체캐시 영역에 차지할수 있는 최대 크기 비율

 result_cache_remote_expiration

0

remote 객체의 결과를 얼마 동안 보관할지 (분)

0 => remote 개체 저장하지 않음 


  • 관련 Latch
    • Result Cache: Latch
    • Result Cache:SO Latch


  • 사용방법


  • Query 캐싱

select /*+ RESULT_CACHE */ COL,COUNT(*)

from R_CACHE_TEST
where GUBUN=7
group by COL

;


  • PL/SQL 함수 캐싱


create or replace function get_team_name (p_team_cd number)
return varchar2
RESULT_CACHE RELIES_ON (r_cache_function)
is
l_team_name r_cache_function.team_name%type;
begin
select team_name into l_team_name
from r_cache_function
where team_cd=p_team_cd;
return l_team_name;
end;

/



    • v$result_cache_objects 에서 캐싱된 자료를 확인가능
    • bind  변수 사용시에는 bind  변수의 값의 종류 별로 캐싱됨
    • LRU 알고리즘에 의해 관리됨
    • 캐싱된 쿼리가 참조하는  TABLE 에 변경 발생시 해당 캐시 엔트리는 무효화 됨
    • 파티션 테이블에 DML이 발생해도 무관한 파티션 까지 무효화됨
    • PL/SQL 함수 캐싱시에는 relies_on  에 명시된 테이블이 변경되면 무효화됨




  • 쿼리 결과 집합을 캐싱하지 못하는 경우
    • Dictionary Object 참조
    • Temporary 테이블 참조
    • Sequence 사용 (Currval, nextval pseudo 컬럼 호출)
    • 다음 함수 사용시
      • CURRENT_DATE
      • CURRENT_TIMESTAMP
      • LOCAL_TIMESTAMP
      • SYS_CONTEXT(with non-constant vriables)
      • SYS_GUID
      • SYSDATE
      • SYSTIMESTAMP
      • USERENV(with non-constant variables)

  • Result 캐시의 극대화
    • 작은 결과 집합을 얻으려고 대용량 데이터를 읽어야 할때
    • 읽기 전용의 작은 테이블을 반복적으로 읽어야 할 때
    • 읽기 전용 코드 테이블을 읽어 코드 명칭을 반환하는 함수


  • Result 캐시 사용의 자제
    • DML 이 많이 발생하는 TABLE
    • 함수 또는 바인드 변수를 가진 쿼리에서 입력되는 값의 종류가 많고 그 값들이 골고루 입력 될때