본문 바로가기
Database/Oracle

[ORACLE] DBA_CACHEABLE_OBJECTS 완벽 해설 : 캐시 가능한 객체의 구조와 성능 최적화 전략

by Papa Martino V 2025. 10. 13.
728x90

DBA_CACHEABLE_OBJECTS
[ORACLE] DBA_CACHEABLE_OBJECTS

 

Oracle Database는 SQL 문장 실행 시 재사용 가능한 객체를 공유 풀(Shared Pool)에 저장하여 불필요한 재파싱을 줄이고, 시스템 성능을 최적화합니다. 이러한 캐시 대상 객체를 관리하고 분석하기 위한 핵심 뷰가 바로 DBA_CACHEABLE_OBJECTS입니다. 이 글에서는 해당 뷰의 구조, 주요 컬럼, 활용 시나리오, 성능 튜닝 포인트까지 전문가 수준으로 자세히 설명합니다.


1. DBA_CACHEABLE_OBJECTS란?

DBA_CACHEABLE_OBJECTS는 Oracle 데이터베이스에서 공유 가능한 SQL, PL/SQL, 커서, 함수 등을 캐시할 수 있는 객체 정보를 제공하는 데이터 딕셔너리 뷰입니다. 즉, 공유 풀(Shared Pool)의 라이브러리 캐시(Library Cache)에 어떤 객체가 캐시될 수 있는지를 보여줍니다. 이 정보는 SQL 재사용성 분석, 메모리 효율성 평가, 캐시 정책 최적화 등 다양한 성능 관리 작업에서 활용됩니다. Oracle은 파싱된 SQL 문장을 라이브러리 캐시에 저장해 재사용하며, 동일한 SQL이 다시 실행될 때 파싱 비용 없이 빠르게 수행되도록 합니다. 따라서 DBA_CACHEABLE_OBJECTS는 “재사용 가능한 객체”의 목록과 그 속성을 파악하기 위한 기반 뷰라 할 수 있습니다.


2. DBA_CACHEABLE_OBJECTS 주요 컬럼 설명

컬럼명 데이터 타입 설명
OWNER VARCHAR2(30) 객체를 소유한 스키마 이름
NAME VARCHAR2(128) 캐시 가능한 객체의 이름
TYPE VARCHAR2(20) 객체 유형 (TABLE, VIEW, PACKAGE, FUNCTION 등)
NAMESPACE NUMBER 객체가 속한 네임스페이스 식별자 (Library Cache 내부 영역)
CREATION_TIME DATE 객체가 생성된 시간
LAST_DDL_TIME DATE 객체 정의가 마지막으로 변경된 시각
SHARABLE_MEM NUMBER 객체가 공유 풀 내에서 사용하는 메모리 크기 (바이트 단위)
KEPT VARCHAR2(3) KEEP 캐시 설정 여부 (‘YES’ 또는 ‘NO’)
LOADS NUMBER 객체가 공유 풀에 로드된 횟수
EXECUTIONS NUMBER 해당 객체(예: SQL, PROCEDURE)가 실행된 횟수

이 중에서도 SHARABLE_MEMLOADS, EXECUTIONS 컬럼은 성능 진단 시 매우 중요한 지표로 사용됩니다. 메모리 사용량이 크거나 로드 횟수가 많은 객체는 캐시 효율성을 분석해야 하며, 불필요한 SQL 파싱을 줄이는 튜닝 대상으로 판단할 수 있습니다.


3. DBA_CACHEABLE_OBJECTS의 역할과 중요성

Oracle의 SQL 최적화 전략은 크게 “파싱 최소화”와 “공유 풀 효율성 유지”로 요약됩니다. DBA_CACHEABLE_OBJECTS는 이 두 영역 모두에 직결되는 뷰로, 다음과 같은 관리 목적에 활용됩니다.

  • 공유 풀에서 캐시 가능한 객체의 목록 및 크기 파악
  • SQL 문장 재사용률 분석을 통한 Hard Parse 감소
  • PL/SQL, 함수, 트리거 등 재사용 가능한 코드의 캐시 관리
  • KEEP 정책 설정을 통한 메모리 상주 객체 유지 전략 수립
  • DB 성능 모니터링 및 SQL 튜닝 근거 데이터 확보

4. DBA_CACHEABLE_OBJECTS 조회 예제

SELECT OWNER, NAME, TYPE, SHARABLE_MEM, LOADS, EXECUTIONS
FROM DBA_CACHEABLE_OBJECTS
WHERE SHARABLE_MEM > 100000
ORDER BY SHARABLE_MEM DESC;

이 쿼리는 100KB 이상의 캐시 가능한 객체 중 메모리 사용량이 큰 순서로 정렬하여 보여줍니다. 이를 통해 불필요하게 많은 메모리를 점유하는 SQL 문장이나 PL/SQL 객체를 식별할 수 있습니다.


5. 캐시 가능한 객체 유형별 비교

객체 유형 캐시 목적 주요 활용 예시 비고
SQL CURSOR SQL 문장의 재사용 SELECT, DML 문장 공유 풀 핵심 요소
PL/SQL FUNCTION 함수 실행 효율성 향상 계산 로직 반복 호출 시 자주 호출 시 KEEP 대상
PACKAGE 모듈 단위의 코드 재사용 비즈니스 로직 공통 처리 메모리 상주 시 성능 향상
VIEW 논리적 데이터 구조 재활용 복잡한 SELECT 단순화 자주 호출 시 캐시 유지
TRIGGER 이벤트 기반 자동 처리 INSERT/UPDATE 시 실행 부하 적정성 점검 필요

6. 캐시 성능 최적화 전략

① SQL 파싱 최소화

같은 논리의 SQL 문장이 다른 리터럴 값으로 반복 수행될 경우, 캐시 효율이 떨어집니다. 바인드 변수를 활용한 SQL 작성으로 Hard Parsing을 줄이면, 라이브러리 캐시 부하를 크게 줄일 수 있습니다.

-- 비효율적 (리터럴 사용)
SELECT * FROM EMP WHERE DEPTNO = 10;
SELECT * FROM EMP WHERE DEPTNO = 20;

-- 효율적 (바인드 변수 사용)
SELECT * FROM EMP WHERE DEPTNO = :deptno;

② KEEP 캐시 정책 활용

ALTER TABLE … STORAGE (BUFFER_POOL KEEP) 또는 DBMS_SHARED_POOL.KEEP 프로시저를 통해 자주 사용되는 객체를 Shared Pool에 고정(KEEP)하면, 재로딩 부담 없이 지속적인 접근이 가능합니다.

③ 캐시 히트율 관리

DBA_CACHEABLE_OBJECTS와 V$LIBRARYCACHE를 조합하여 캐시 히트율(Cache Hit Ratio)을 계산하면, SQL 재사용률을 정량적으로 평가할 수 있습니다. 일반적으로 95% 이상의 히트율을 유지하는 것이 바람직합니다.

SELECT NAMESPACE, PINS, RELOADS,
       ROUND((1 - (RELOADS / PINS)) * 100, 2) AS HIT_RATIO
FROM V$LIBRARYCACHE;

7. DBA_CACHEABLE_OBJECTS와 관련된 주요 뷰 비교

뷰 이름 설명 주요 활용 목적 비교 요약
DBA_CACHEABLE_OBJECTS 캐시 가능한 객체 목록 공유 풀 내 재사용 가능한 객체 확인 기본 분석 뷰
V$DB_OBJECT_CACHE 현재 캐시된 객체 정보 메모리에 실제 상주 중인 객체 모니터링 실시간 성능 진단용
DBA_OBJECTS 데이터베이스 전체 객체 정보 객체 생성 및 속성 관리 전체 구조 참조
V$SQLAREA SQL 문장별 실행 통계 SQL 성능 분석 SQL 재사용률 분석 보조

8. DBA_CACHEABLE_OBJECTS 활용 실무 예시

① 자주 호출되는 PL/SQL 함수 캐시 유지

EXEC DBMS_SHARED_POOL.KEEP('HR.CALC_SALARY', 'P');

인사 시스템에서 급여 계산 함수를 KEEP 캐시로 유지하여 반복 호출 시 파싱 비용을 최소화할 수 있습니다.

② 비정상적인 메모리 점유 객체 탐지

SELECT OWNER, NAME, TYPE, SHARABLE_MEM
FROM DBA_CACHEABLE_OBJECTS
WHERE SHARABLE_MEM > (SELECT AVG(SHARABLE_MEM)*5 FROM DBA_CACHEABLE_OBJECTS);

평균 메모리 사용량의 5배를 초과하는 객체를 탐지하여 캐시 낭비를 줄입니다.

③ SQL 재사용률 평가

SELECT SUM(EXECUTIONS)/COUNT(DISTINCT NAME) AS AVG_EXEC_PER_OBJECT
FROM DBA_CACHEABLE_OBJECTS;

객체별 평균 실행 횟수를 계산해 캐시 효율성을 평가할 수 있습니다.


9. DBA_CACHEABLE_OBJECTS 관리 시 주의사항

  • 공유 풀 메모리(SHARED_POOL_SIZE)가 부족하면 캐시 객체가 지속적으로 flush될 수 있음
  • KEEP 대상은 신중히 선정 — 모든 객체를 고정하면 오히려 캐시 효율 저하 발생
  • DBMS_SHARED_POOL 패키지 사용 시 SYS 권한 필요
  • PL/SQL 패키지 변경 시, KEEP된 객체도 자동으로 무효화됨

10. 결론

DBA_CACHEABLE_OBJECTS는 Oracle의 공유 풀 관리와 SQL 재사용성 최적화에 필수적인 뷰입니다. 이를 활용하면 데이터베이스의 캐시 구조를 세밀하게 분석하여, 메모리 낭비를 방지하고 실행 효율을 극대화할 수 있습니다. 특히 DBMS_SHARED_POOL.KEEP과 함께 사용하면 자주 호출되는 PL/SQL 객체나 SQL을 효율적으로 관리할 수 있으며, 이는 곧 전체 시스템 응답 속도 향상으로 이어집니다. DBA라면 반드시 숙지해야 할 핵심 관리 도구 중 하나입니다.


출처

728x90