query result cache in oracle
11g
오라클자바커뮤니티에서 설립한 개발자실무교육6년차 오엔제이프로그래밍
실무교육센터
(신입사원채용무료교육, 오라클, SQL, 튜닝, 자바, 스프링,
Ajax, jQuery, 안드로이드, 아이폰, 닷넷, C#, ASP.Net) www.onjprogramming.co.kr
오라클 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
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
---------------------------------------------------------------------------------
6
캐시 카운터는 SQL을 실행 할 때마다 늘어 난 다는
것을 알 수 있다.
댓글 없음:
댓글 쓰기