2014년 2월 17일 월요일

 [ORACLE캐싱,오라클11g함수결과캐시]Oracle11g function result cache, RESULT_CACHE RELIES_ON ,구로디지털개발자오라클교육학원,ORACLE실무교육,오라클재직자실무교육,주말/야간오라클강좌 오라클11g의 함수결과 캐싱(Function Result Caching)은 함수의 결과를 캐싱하는 기능으로 캐싱기능을 이용하여 함수를 호출하면 오라클은 같은 input 값으로 이미 실행되었는지를 검사하고 있다면 함수 BODY를 실행하지 않고 캐시 영역에서 결과치를 리턴한다. 만약 처음 실행되는 결과라면 함수를 실행하고 결과를 캐시에 저장하게 된다. 만약 원본 데이터에 변경이 생기면 오라클 서버는 캐시를 없애고 함수의 요청이 있다면 다시 실행하고 캐시에 저장할 것이다. 아래 예를 통해 이해하자. SQL> conn scott/tiger 연결되었습니다. SQL> select count(*) from myemp1; COUNT(*) ---------- 10000000 SQL> CREATE OR REPLACE FUNCTION get_sal 2 (p_deptno IN NUMBER) 3 RETURN NUMBER 4 IS 5 v_sal NUMBER; 6 BEGIN   7 SELECT sum(sal) 8 INTO v_sal 9 FROM myemp1 10 WHERE deptno = p_deptno; 11 12 RETURN v_sal; 13 END get_sal ; 14 / 함수가 생성되었습니다. SQL> SQL> set timing on SQL> select get_sal(0) from dual; GET_SAL(0) ---------- 1.0000E+12 경 과: 00:00:10.68 SQL> select get_sal(0) from dual; GET_SAL(0) ---------- 1.0000E+12 경 과: 00:00:07.81 SQL> CREATE OR REPLACE FUNCTION get_sal2 2 (p_deptno IN NUMBER) 3 RETURN NUMBER 4 RESULT_CACHE RELIES_ON (myemp1) 5 IS 6 v_sal NUMBER; 7 BEGIN   8 SELECT sum(sal) 9 INTO v_sal 10 FROM myemp1 11 WHERE deptno = p_deptno; 12 13 RETURN v_sal; 14 END get_sal2 ; 15 / 함수가 생성되었습니다. 경 과: 00:00:00.04 SQL> select get_sal2(0) from dual; GET_SAL2(0) ----------- 1.0000E+12 경 과: 00:00:08.32 SQL> select get_sal2(0) from dual; GET_SAL2(0) ----------- 1.0000E+12 경 과: 00:00:00.01 SQL> insert into myemp1 (empno, ename, sal, deptno) 2 values (22222222,'22222222길동',1000000, 0); 1 개의 행이 만들어졌습니다. 경 과: 00:00:00.15 SQL> commit; 커밋이 완료되었습니다. SQL> select get_sal2(0) from dual; GET_SAL2(0) ----------- 5.8000E+12 경 과: 00:00:14.09 SQL> select get_sal2(0) from dual; GET_SAL2(0) ----------- 5.8000E+12 경 과: 00:00:00.17 SQL> [출처] 오라클자바커뮤니티 - http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecOrccleTun&wr_id=63 자바 오라클/빅데이터 아이폰/안드로이드 닷넷/WPF 표준웹/HTML5 채용/취업무료교육 초보자코스 [기업100%환급]SQL기초에서 Schema Object까지 총 5일 40시간 02-24 [기업100%환급]PL/SQL,ORACLE HINT,TUNING 총 5일 40시간 03-03 SQL초보에서실전전문가까지 총 18일 54시간 02-19 SQL초보에서실전전문가까지 총 8일 56시간 03-01 [주말저녁]SQL기초에서 Schema Object까지 총 10일 40시간 03-01



[오라클11g함수결과캐시]Oracle11g function result cache, RESULT_CACHE RELIES_ON ,구로디지털개발자오라클교육학원,ORACLE실무교육,오라클재직자실무교육,주말/야간오라클강좌

오라클11g의 함수결과 캐싱(Function Result Caching)은 함수의 결과를 캐싱하는 기능으로 
캐싱기능을 이용하여 함수를 호출하면 오라클은 같은 input 값으로 이미 실행되었는지를 검사하고
있다면 함수 BODY를 실행하지 않고 캐시 영역에서 결과치를 리턴한다. 만약 처음 실행되는 결과라면
함수를 실행하고 결과를 캐시에 저장하게 된다.

만약 원본 데이터에 변경이 생기면 오라클 서버는 캐시를 없애고 함수의 요청이 있다면 다시 실행하고 캐시에 저장할 것이다.

아래 예를 통해 이해하자.

SQL> conn scott/tiger
연결되었습니다.

SQL> select count(*) from myemp1;

  COUNT(*)
----------
  10000000

SQL> CREATE OR REPLACE  FUNCTION get_sal
  2              (p_deptno  IN  NUMBER)
  3   RETURN  NUMBER
  4  IS
  5              v_sal  NUMBER;
  6  BEGIN  
  7              SELECT  sum(sal)
  8              INTO      v_sal
  9              FROM     myemp1
 10              WHERE deptno  =  p_deptno;
 11
 12              RETURN v_sal;
 13  END get_sal ;
 14  /

함수가 생성되었습니다.

SQL>
SQL> set timing on
SQL> select get_sal(0) from dual;

GET_SAL(0)
----------
1.0000E+12

경   과: 00:00:10.68
SQL> select get_sal(0) from dual;

GET_SAL(0)
----------
1.0000E+12

경   과: 00:00:07.81


SQL> CREATE OR REPLACE  FUNCTION get_sal2
  2              (p_deptno  IN  NUMBER)
  3   RETURN  NUMBER
  4   RESULT_CACHE RELIES_ON (myemp1)
  5  IS
  6              v_sal  NUMBER;
  7  BEGIN  
  8              SELECT  sum(sal)
  9              INTO      v_sal
 10              FROM     myemp1
 11              WHERE deptno  =  p_deptno;
 12
 13              RETURN v_sal;
 14  END get_sal2 ;
 15  /

함수가 생성되었습니다.

경   과: 00:00:00.04

SQL>  select get_sal2(0) from dual;

GET_SAL2(0)
-----------
 1.0000E+12

경   과: 00:00:08.32

SQL>  select get_sal2(0) from dual;

GET_SAL2(0)
-----------
 1.0000E+12

경   과: 00:00:00.01


SQL> insert into myemp1 (empno, ename, sal, deptno)
  2  values (22222222,'22222222길동',1000000, 0);

1 개의 행이 만들어졌습니다.

경   과: 00:00:00.15
SQL> commit;

커밋이 완료되었습니다.

SQL> select get_sal2(0) from dual;

GET_SAL2(0)
-----------
 5.8000E+12

경   과: 00:00:14.09

SQL> select get_sal2(0) from dual;

GET_SAL2(0)
-----------
 5.8000E+12

경   과: 00:00:00.17
SQL>

댓글 없음:

댓글 쓰기