문서유형ㅣ기술정보
분야ㅣ튜닝
적용제품버전ㅣTibero 7.2.3
문서번호ㅣTTUTI030
개요
RESULT_CACHE 기능은 Function 이나 SQL을 메모리에 저장해두었다가, 같은 입력 값으로 다시 호출될 때 SQL을 재 실행하지 않고 캐싱 된 결과를 바로 반환하는 기능입니다.
Tibero 에서 RESULT_CACHE 기능을 활용할 수 있는 방법에 대해 기술하였습니다.
참고
본 테스트는 아래와 같은 환경에서 진행되었습니다.
- Tibero 7 (DB 7.2.3) Build 302874
- Linux bistro-build-centos_8.4 5.15.0-134-generic #145~20.04.1-Ubuntu
- SMP Mon Feb 17 13:27:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux version (little-endian)
방법
SELECT 구문 사용 시 RESULT_CACHE 옵션 사용
1. 테스트를 위한 테이블 생성
SQL> CREATE TABLE tibero.TB_COMMON_CODE (
MCA_CODE VARCHAR2(20),
CODE VARCHAR2(20),
CODE_NAME VARCHAR2(100),
CODE_DESC VARCHAR2(200),
USE_YN CHAR(1)
);
Table 'TIBERO.TB_COMMON_CODE' created.
SQL> INSERT INTO tibero.TB_COMMON_CODE VALUES ('SYS01', '001', '정상', '정상 코드', 'Y');
1 row inserted.
SQL> INSERT INTO tibero.TB_COMMON_CODE VALUES ('SYS01', '002', '중지', '중지 코드', 'Y');
1 row inserted.
SQL> COMMIT;
Commit completed.
2. 캐시 초기 상태 확인
SQL> SELECT * FROM V$RESULT_CACHE_OBJECTS; 0 row selected.
3. RESULT_CACHE 미 사용 SQL
SQL> SELECT CODE_NAME FROM tibero.TB_COMMON_CODE WHERE MCA_CODE = 'SYS01'; CODE_NAME ------------------------------ 정상 중지 2 rows selected. SQL> SELECT ID, NAME, TYPE, STATUS FROM V$RESULT_CACHE_OBJECTS; 0 row selected.
4. RESULT_CACHE 사용하여 SQL 조회
SQL> SELECT CODE_NAME FROM tibero.TB_COMMON_CODE WHERE MCA_CODE = 'SYS01';
CODE_NAME
------------------------------
정상
중지
2 rows selected.
SQL> SELECT ID, NAME, TYPE, STATUS,PIN_COUNT FROM V$RESULT_CACHE_OBJECTS;
ID NAME TYPE STATUS
---------- ------------------------------------------------------------ ---------- ---------
0 TIBERO.TB_COMMON_CODE Dependency Published
1 SELECT /*+ RESULT_CACHE */ CODE_NAME Result Published
FROM TIBERO.TB_COMMON_CODE
WHERE MCA_CODE = 'SYS01'
5. 데이터 변경을 통한 캐시 무효화 유도
SQL> UPDATE TIBERO.TB_COMMON_CODE
SET CODE_DESC = '수정된 설명'
WHERE CODE = '001';
1 row updated.
SQL> COMMIT;
SQL> SELECT ID, NAME, STATUS FROM V$RESULT_CACHE_OBJECTS;
ID NAME STATUS
---------- ------------------------------ ---------
0 TIBERO.TB_COMMON_CODE Published
1 SELECT /*+ RESULT_CACHE */ COD Invalid
E_NAME
FROM TIBERO.TB_COMMON_CODE
WHERE MCA_CODE = 'SYS01'
2 rows selected.
6. 동일 쿼리 재 실행으로 캐시 재 생성
SQL> SELECT ID, NAME, STATUS FROM V$RESULT_CACHE_OBJECTS;
ID NAME STATUS
---------- ------------------------------ ---------
0 TIBERO.TB_COMMON_CODE Published
1 SELECT /*+ RESULT_CACHE */ COD Published
E_NAME
FROM TIBERO.TB_COMMON_CODE
WHERE MCA_CODE = 'SYS01'
2 rows selected.
Function 사용 시 RESULT_CACHE 옵션 사용
1. RESULT_CACHE 옵션을 포함한 Function 생성
CREATE OR REPLACE FUNCTION TIBERO.Z_SF_COMM002_GETVALUE
/*****************************************************************************
** 개요 : 코드, 필드를 입력받아 코드값을 리턴한다.
** INPUT : 대분류코드(IN_MCA_CODE), 코드(IN_CODE), 리턴필드(IN_FIELD)
** OUTPUT : 리턴필드에 해당하는 값
** 비고 : 동일 입력값 반복 호출 시 RESULT CACHE를 활용하여 성능 향상
*****************************************************************************/
(
IN_MCA_CODE IN VARCHAR2,
IN_CODE IN VARCHAR2,
IN_FIELD IN VARCHAR2
)
RETURN VARCHAR2
RESULT_CACHE
IS
V_RESULT VARCHAR2(4000);
BEGIN
SELECT CASE IN_FIELD
WHEN 'CODE_NAME' THEN CODE_NAME
WHEN 'CODE_DESC' THEN CODE_DESC
WHEN 'USE_YN' THEN USE_YN
ELSE NULL
END
INTO V_RESULT
FROM TIBERO.TB_COMMON_CODE
WHERE MCA_CODE = IN_MCA_CODE
AND CODE = IN_CODE;
RETURN V_RESULT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
WHEN OTHERS THEN
RETURN NULL;
END Z_SF_COMM002_GETVALUE_bak;
/
2. Function 수행
-- 최초 실행 (캐시 생성)
SELECT TIBERO.Z_SF_COMM002_GETVALUE('SYS01', '001', 'CODE_NAME') AS RESULT FROM DUAL;
RESULT
-------------
정상
1 row selected.
-- 동일 파라미터 재실행 (캐시 Hit)
SELECT TIBERO.Z_SF_COMM002_GETVALUE('SYS01', '001', 'CODE_NAME') AS RESULT FROM DUAL;
RESULT
-------------
정상
1 row selected.
3. RESULT_CACHE 사용 여부
SELECT NAME, TYPE, STATUS, CREATION_TIMESTAMP, ROW_COUNT, SPACE_USED FROM V$RESULT_CACHE_OBJECTS WHERE NAMESPACE= 'UDF'; NAME TYPE STATUS CREATION_TIMESTAMP ROW_CO SPACE_USED ------------------------------ ---------- --------- -------------------- ------ ---------- TIBERO.Z_SF_COMM002_GETVALUE Result Published 2025/11/13 1 1167 1 row selected.
RESULT_CACHE 효율 분석 모니터링
SELECT STATUS,
COUNT(*) AS OBJECT_COUNT,
SUM(SPACE_USED) AS TOTAL_SPACE_USED
FROM V$RESULT_CACHE_OBJECTS
GROUP BY STATUS;
STATUS OBJECT_COUNT TOTAL_SPACE_USED
--------- ------------ ----------------
Invalid 2 2334
Published 3 0
2 rows selected.
주의
STATUS컬럼의 Invalid 값이 높다면, 테이블 변경에 의해 캐시가 자주 무효화 되고 있음을 판단하여, RESULT_CACHE 옵션을 사용하는 SQL을 다시 검토할 필요가 있습니다.