정의
- library cache chain을 탐색하기 위해 library cache latch를 획득할 때까지 대기하는 이벤드
대기 발생 사유
1.하드파싱이나 소프트파싱이 과다한 경우
- 하드파싱이 많이 발생하면 Library Cache 를 탐색하는 회수가 늘어나므로 그 만큼 library cache 래치를 보유하는 시간과 회수가 늘어난다.
- 하드파싱의 경우 Library Cache 영역에 대한 탐색뿐만 아니라 추가적인 청크 할당이 필요하기 때문에 그만큼 library cache 래치를 보유하는 시간이 늘어난다.
- 소프트파싱은 하드파싱에 비해 그 비용이 매우 싸긴 하지만 신택스(Syntax) 체크 / 시맨틱(Semantics) 체크 / Library Cache 탐색 등의 과정은 피할 수 없다.
이 과정에서 Library Cache를 탐색하는 동안 library cache 래치를 획득해야만 한다. 따라서 많은 세션이 동시에 소프트파싱을 수행하는 경우 library cache 래치 경합에 의한 성능 저하 현상이 발생한다.
2.버전 카운트(Version count)가 높은 경우
- 자식 LCO 탐색으로 인해 library cache를 탐색하는 시간이 증가하며 이로 인해 library cache 래치 경합이 증가한다.
3.SGA영역의 페이지 아웃(Page out)이 발생하는 경우
- Shared Pool이 디스크로 페이지 아웃된 경우, 해당 영역에 대한 스캔이 발생할 때 다시 디스크의 내용을 메모리로 불러들이는 과정동안 대기해야 하므로 library cache 래치에 대한 대기시간이 증가할 수 있다.
개선 방법
1. 파싱회수를 줄인다.
- 파싱 회수를 줄이면 그만큼 library cache 래치 경합을 줄일 수 있다. ( Java 환경의 경우 PreparedStatement 객체 이용, 특정 Web Application Server의 경우 Statement Cache 기능 이용)
- PL/SQL의 Dynamic SQL을 사용할 때는 커서(Cursor) 재사용이 불가하여 library cache 래치 경합이 증가할 수 있다.
2. SESSION_CACHED_CURSORS 파라미터 - SESSION_CACHED_CURSORS 파라미터 값이 세팅되어 있으면 오라클은 세 번 이상 수행된 SQL 커서에 대한 정보를 PGA내에 보관한다. (기본값은 버전마다 다르다. 기본값이 작다면 되도록이면 50 이상의 값을 설정)
문서에 대하여
- 최초작성자 : ~kwlee55
- 최초작성일 : 2010년 09월 07일
- 이 문서는 오라클클럽 코어 오라클 데이터베이스 스터디 모임에서 작성하였습니다.
- {*}이 문서의 내용은 (주)엑셈에서 출간한 'PRACTICAL OWI IN ORACLE 10G'와 'wiki.ex-em.com'를 참고하였습니다.*