
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_MEM과 LOADS, 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라면 반드시 숙지해야 할 핵심 관리 도구 중 하나입니다.
출처
- Oracle® Database Reference 19c - DBA_CACHEABLE_OBJECTS View
- Oracle® Performance Tuning Guide
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] DBA_CACHEABLE_TABLES_BASE 완벽 해설 : 캐시 정책의 기반 구조와 성능 최적화의 핵심 (0) | 2025.10.13 |
|---|---|
| [ORACLE] DBA_CACHEABLE_TABLES 완벽 해설 : 캐시 가능한 테이블의 이해와 성능 최적화 전략 (0) | 2025.10.13 |
| [ORACLE] DBA_AUDIT_TRAIL 완벽 가이드 : 오라클 감사 로그의 핵심 구조와 활용법 (0) | 2025.10.13 |
| [ORACLE] DBA_AUDIT_STATEMENT 완벽 가이드 : SQL 명령 단위 감사의 모든 것 (0) | 2025.10.13 |
| [ORACLE] DBA_AUDIT_SESSION 완벽 가이드 : 로그인 및 세션 감사의 핵심 이해 (0) | 2025.10.13 |