오라클에서 커서를 공유한다 라는 표현을 자주 사용하는데 여기서 말하는 커서는 라이브러리 캐시의 공유 커서를 일컫는다. 세션커서, 애플리케이션 커서는 다른 프로세스와 공유할수 없다.
공유된 커서는 소프트 파싱을 일으키며 해당 SQL을 캐싱해놓고 가져다 쓰기만 하면 되는 기법이다.
어떻게 커서를 공유할까?
커서를 공유할때는 Key값이 같은 것끼리 사용하는데, 라이브러리 캐시에서 키는 SQL문장 그 자체이다.
SQL을 구성하는 문자열이 그 역할을 하는데 이는
select * from emp
select * From emp
위 두문장이 서로 다른 키값을 가진다는 뜻이다.
그 외에 띄어쓰기, 주석 등으로도 서로다른 SQL문으로 인식하여 커서공유가 불가능 하다.
어떻게 극대화 하는가?
위와같은 성격으로 인해 where 절 등에서 바인드변수를 사용시 최대효율을 뽑아낸다.
바인드 변수를 사용하면 최초 수행시 최적화를 거친 실행계획을 캐시에 적재하고, 실행시점에는 그것을 가져와 값을 다르게 바인딩 하면서 반복 재사용한다.
그러므로 하드파싱은 최초 1회 실행되며 그후로는 계속 소프트 파싱으로 계획을 수립하여 성능상의 큰 이점이 있다.
그와 반대로
조건절에서 리터럴 상수값이 게속 바뀐다면 여지없이 하드파싱이 계속 일어나며 최초와는 대비되는 점이다.
주의사항
주의할 점은 해당 쿼리를 안전하게 적재 하여도, 데이터 변동, 컬럼 삭제 추가등이 일어난다면 해당 커서는 무효화 된다.