1. result_cache 힌트는?
select /*+ result_cache */ count(*) from test_objs a, test_segs b where a.object_name <> b.segment_name; |
- 쿼리 결과를 caching 하라는 힌트이다.
- 조회 용도의 select 되는 건이 많지 않고, 값이 변하지 않는 데이터(예를 들면 과거 매출 데이터) 등을 집계 / 분석하는 쿼리에 result_cache 힌트를 사용하면 유용하다.
- caching 할 크기가 너무 커서 result_cache_max_size, result_cache_max_result 파라미터 값을 넘어가면 캐싱 기능을 사용할 수 없다.
- Data dictionary, Temporary Table에 대한 쿼리 또는 시퀀스에 대한 curval, nextval에 대한 쿼리는 캐시되지 않는다.
관련 파라미터
SQL> show parameter result_cache
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
client_result_cache_lag big integer 3000
client_result_cache_size big integer 0
result_cache_max_result integer 5
result_cache_max_size big integer 11904K
result_cache_mode string MANUAL
result_cache_remote_expiration integer 0
result_cache_max_result : 단일 result_set 캐시안에 캐시될 최대 비율(%)이며, 이를 초과할 경우 캐싱 기능을 사용할 수 없는 invalid 상태가 된다.
result_cache_mode : default 값이 manual이며, result_cache 힌트를 명시해야 결과값 캐싱이 된다.
result_cache_max_size : 캐싱되는 최대 바이트 사이즈 이다.
result_cache_remote_expiration : 원격오브젝트에 대한 쿼리 결과로 캐싱되어 유효한 시간
2. result_cache 힌트를 사용한 SQL 수행 결과
SQL> select /*+ result_cache */ count(*)
from test_objs a, test_segs b
where a.object_name <> b.segment_name; 2 3
COUNT(*)
----------
411839796
Elapsed: 00:00:32.20
SQL> /
COUNT(*)
----------
411839796
Elapsed: 00:00:00.01
참고사이트 :