클라이언트 결과 캐시 개요
오라클 데이터베이스에서 클라이언트 결과 캐시(Client Result Cache)는 클라이언트 측(예: OCI, JDBC)에서 실행되는 애플리케이션의 쿼리 성능을 획기적으로 향상시키는 기능입니다. 반복적인 쿼리에 대해 서버 왕복 없이 로컬 메모리에서 결과를 빠르게 반환하여 응답 시간을 단축하고 서버 자원을 절약합니다.
클라이언트 결과 캐시의 이점
- 응답 시간 단축: 자주 실행되는 쿼리의 결과를 클라이언트 측에 저장하여 서버 왕복 횟수를 줄입니다.
- 서버 부하 감소: 서버에서 쿼리 처리를 줄여 데이터베이스 서버의 부하를 줄이고, 다른 작업을 위한 자원을 확보합니다.
- 확장성 향상: 서버 자원 소비를 줄여 데이터베이스 서버의 확장성을 향상시킵니다.
- 네트워크 트래픽 감소: 클라이언트와 서버 간의 데이터 전송량을 줄여 네트워크 병목 현상을 완화합니다.
클라이언트 결과 캐시 설정
클라이언트 결과 캐시는 쿼리 수준, 테이블 수준, 세션 수준에서 설정할 수 있습니다. 각 수준별 설정 방법과 특징은 다음과 같습니다.
쿼리 수준 캐시 설정 (SQL 힌트)
개별 쿼리에 대해 캐시 사용 여부를 지정할 수 있습니다. RESULT_CACHE
힌트를 사용하면 쿼리 결과를 클라이언트 측에 캐시하고, NO_RESULT_CACHE
힌트를 사용하면 캐시하지 않습니다.
SELECT /*+ RESULT_CACHE */ deptno, dname FROM dept WHERE deptno = 10; -- 캐시 사용
SELECT /*+ NO_RESULT_CACHE */ empno, ename FROM emp WHERE deptno = 20; -- 캐시 사용 안 함
테이블 수준 캐시 설정 (테이블 주석)
테이블에 주석을 추가하여 해당 테이블에 대한 모든 쿼리의 캐시 사용 여부를 설정할 수 있습니다. 테이블 주석은 쿼리 힌트보다 우선 순위가 낮습니다.
-- 캐시 사용 안 함 설정
ALTER TABLE employees DEFAULT RESULT_CACHE (NONE);
-- 캐시 강제 사용 설정
ALTER TABLE products DEFAULT RESULT_CACHE (FORCE);
-- 현재 테이블 캐시 모드 확인
SELECT table_name, result_cache FROM user_tables WHERE table_name = 'EMPLOYEES';
세션 수준 캐시 설정 (세션 파라미터)
세션 파라미터를 사용하여 해당 세션에서 실행되는 모든 쿼리의 캐시 사용 여부를 설정할 수 있습니다. 세션 파라미터는 테이블 주석보다 우선 순위가 낮습니다.
-- 세션 수준에서 캐시 사용 모드 설정
ALTER SESSION SET RESULT_CACHE_MODE = FORCE; -- FORCE, MANUAL, OFF
-- 현재 세션의 캐시 모드 확인
SHOW PARAMETER result_cache_mode;
클라이언트 결과 캐시 작동 방식
쿼리가 실행될 때, 데이터베이스는 캐시에 결과가 있는지 확인합니다. 만약 캐시에 결과가 존재하면, 데이터는 서버에서 가져오는 대신에 클라이언트 측에서 직접 반환됩니다. 결과가 캐시에 없다면, 쿼리는 일반적으로 처리되고 결과는 캐시에 저장됩니다.
클라이언트 결과 캐시 관련 뷰
클라이언트 결과 캐시의 설정 및 통계를 확인하려면 다음의 뷰를 사용할 수 있습니다.
V$RESULTCACHE_MEMORY
: 결과 캐시에 할당된 메모리 사용량 정보V$RESULTCACHE_OBJECITS
: 결과 캐시에 저장된 객체 정보V$RESULTCACHE_DEPENDENCY
: 결과 캐시 객체의 종속성 정보V$SQL
: 캐시된 SQL 문 관련 정보USER_TABLES
또는ALL_TABLES
: 테이블의 result_cache 컬럼을 확인하여 테이블 수준 캐시 모드 확인
-- 결과 캐시 메모리 사용량 확인
SELECT * FROM V$RESULTCACHE_MEMORY;
-- 특정 세션에서 캐시되는 쿼리 정보 확인 (해당 쿼리에서 comment 힌트 사용)
SELECT sql_text, result_cache, executions FROM V$SQL WHERE sql_text LIKE '%RESULT_CACHE_TEST%';
주의사항 및 제한사항
- 캐시 무효화: 기본 테이블이 변경되면 캐시된 결과는 무효화됩니다.
- 결과 캐시는 읽기 전용 및 거의 읽기 전용 테이블에 가장 적합합니다.
- 일부 SQL 구문 (예 : LOB, Snapshot 쿼리 등) 은 지원되지 않습니다.
- 대규모 결과 세트는 메모리 사용량에 영향을 줄 수 있습니다.
- 커밋 읽기 일관성이 보장되어야 합니다.
결론
클라이언트 결과 캐시는 오라클 데이터베이스 성능을 최적화하는 강력한 도구입니다. 올바른 설정과 활용을 통해 애플리케이션 응답 시간을 단축하고, 데이터베이스 서버의 부하를 줄이며, 전체 시스템 성능을 향상시킬 수 있습니다. 본 가이드를 통해 클라이언트 결과 캐시를 효과적으로 이해하고, 활용하여 최적의 데이터베이스 환경을 구축하시기 바랍니다.