1) 테이블, 컬럼, 인덱스 구조에 관한 기본 정보
2) 오브젝트 통계: 테이블 통계, 인덱스 통계, (히스토그램을 포함한) 컬럼 통계
3) 시스템 통계: CPU 속도, Single Block I/O 속도, Multiblock I/O 속도 등
4) 옵티마이저 관련 파라미터
→ 이처럼 복잡한 작업을 겨쳐 생성한 내부 프로시저를 한번만 사용하고 버린다면 비효율적. 라이브러리 캐시가 필요한 이유.
# 서로 다른 SQL문임.
SELECT * FROM emp WHERE empno = 7900;
select * from EMP where EMPNO = 7900;
파라미터만 다르고 내부 처리 루틴이 같은 프로시저의 경우에는 바인드 변수를 사용해야 라이브러리 캐시에 하나의 SQL문만 저장해서 과도한 라이브러리 캐시들이 경합을 벌이지 않게 해야 한다.
변경 전
String SQLStmt = "SELECT * FROM CUSTOMER WHERE LOGIN_ID = '" + login_id + "'"
# 내부 프로시저
create procedure LOGIN_ORAKING( ) { ... }
create procedure LOGIN_JAVAKING( ) { ... }
String SQLStmt = "SELECT * FROM CUSTOMER WHERE LOGIN_ID = ?"
# 내부 프로시저
create procedure LOGIN (login_id in varchar2) { ... }