카테고리 없음2023. 11. 16. 11:01

 

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

 

 

참고사이트 : 

https://blog.naver.com/dbmsexpert/221185913762

Posted by 자수성가한 부자