2013년 11월 20일 수요일

오라클 11g의 캐싱은 쿼리 결과를 캐싱 하는 특징이 있는데 예를 보자. SQL> SELECT name, value, isdefault FROM v$parameter ...

오라클 11g의 캐싱은  쿼리 결과를 캐싱 하는 특징이 있는데 예를 보자. 


  
SQL> SELECT name, value, isdefault 
    FROM  v$parameter 
    WHERE  name LIKE 'result_cache%'; 
  
NAME                              VALUE              ISDEFAULT 
---------------------------------- ------------------ --------- 
result_cache_mode                  MANUAL            TRUE 
result_cache_max_size              3244032            TRUE 
result_cache_max_result            5                  TRUE 
result_cache_remote_expiration    0                  TRUE 
  
  
4 rows selected. 
  
  
result_cache_mode: Result Cache는 세가지 방법으로 Oracle Hint or alter session, alter system으로 가능하다. Default 값이 MANUAL인데 “RESULT_CACHE”힌트를 명시해야 결과값 캐싱이 된다. 
  
result_cache_max_size : 캐싱되는 최대 바이트 사이즈 
  
result_cache_max_result: 단일 resultset에서 캐시되는 최대 비율(기본 5%) 
  
result_cache_remote_expiration: 원격오브젝트에 대한 쿼리 결과로 캐싱 되어 유효한 시간. 기본 0은 
  
SQL>ALTER SYSTEM SET result_cache_max_size = 2M SCOPE = MEMORY 
  
SQL> SELECT name, value 
  2  FROM  v$parameter 
  3  WHERE  name = 'result_cache_max_size'; 
  
NAME                                    VALUE 
---------------------------------------- ------------------------- 
result_cache_max_size                    2097152 
  
1 row selected. 
  
  
이번에는 result cache를 manually로… 
  
SQL> SELECT value 
  2  FROM  v$parameter 
  3  WHERE  name = 'result_cache_mode'; 
  
VALUE 
---------------- 
MANUAL 
  
1 row selected. 
  
  
  
  
  
SQL> set autotrace traceonly 
  
SQL> set timing on 
  
SQL> SELECT /*+ RESULT_CACHE */ 
        e.empno, 
        d.dname 
    FROM  emp e 
    ,      dept d 
    WHERE  e.deptno = d.deptno 
    ANd  e.deptno = 10; 
  
EMPNO      DNAME          
---------- -------------- 
      7782 ACCOUNTING    
      7839 ACCOUNTING    
      7934 ACCOUNTING 
  
  
|  0 | SELECT STATEMENT              |                            |    5 |  1 
00 |    4  (0)| 00:00:01 | 
|  1 |  RESULT CACHE                | 4tg609zzhkhzs1k1wkzvcsrduk |      | 
  |            |          | 
|  2 |  NESTED LOOPS                |                            |    5 |  1 
00 |    4  (0)| 00:00:01 | 
|  3 |    TABLE ACCESS BY INDEX ROWID| DEPT                      |    1 | 
13 |    1  (0)| 00:00:01 | 
|*  4 |    INDEX UNIQUE SCAN        | PK_DEPT                    |    1 | 
  |    0  (0)| 00:00:01 | 
|*  5 |    TABLE ACCESS FULL          | EMP                        |    5 | 
35 |    3  (0)| 00:00:01 | 
  
  
  
  
이런데 힌트를 써서 결과값을 캐싱 가능한데, 과연 캐싱이 몇번 일어 났는지는 어떻게 확인 할까? 
  
SELECT value 
  FROM  v$result_cache_statistics 
WHERE  name = 'Find Count'; 
  
  
  
SQL> SELECT value 
  FROM  v$result_cache_statistics 
  WHERE  name = 'Find Count'; 
  
VALUE                                                                            
--------------------------------------------------------------------------------- 

  
캐시 카운터는 SQL을 실행 할 때마다 늘어 난 다는 것을 알 수 있다. 
실습해 보라. 

댓글 없음:

댓글 쓰기