JSP PreparedStatement와 Statement의 성능
페이지 정보
본문
오라클은 내부적으로 라이브러리 캐쉬를 유지합니다.
그리고 이 캐쉬내에는 실행된 SQL문장과 실행계획이 저장되어있습니다.
사용자가 SQL을 실행할때마다 오라클은 이 SQL이 라이브러리 캐쉬에 있는 SQL과
동일한지를 비교하고 만약 같다면 이미 기존에 있는 라이브러리 캐쉬의 실행계획을
가지고 SQL을 수행합니다.
이때 SQL문의 비교규칙은 간단합니다.
"모든 문자가 동일한가."
이는 대소문자, 라인피드, 탭, 스페이스 모두를 다 따지는것입니다.
일반적인 SQL문장에서
select * from emp where empno=1234;
와
select * from emp where empno=2345;
는 다르게 파싱됩니다. 다른문장으로 인식되기 때문이죠.
그러나 만약 비교할 값을 bind variable에 넣고
select * from emp where empno=:target_no;
이렇게 해주고 target_no를 변경하면서 실행되는 SQL문장은 모두같은것으로 인식됩니다.
PreparedStatement란 이처럼 바인드 변수의 사용을 가능케 하기 위해 사용됩니다.
따라서 동일한 문장(위처럼 값만 바뀐다거나 할때)이 여러번 연속적으로 실행되거나
비교적연속적(라이브러리 캐쉬에 있는 실행계획이 LRU에 의해 메모리에서 삭제되기
직전에 다시 실행되기만 한다면)으로 실행된다면 월등한 성능향상을 얻을 수 있습니다.
라이브러리 캐쉬 hit ratio 보통 매우 높게(얼핏 기억으로는 hit가 90% 이상이어야
합니다.) 되도록 DB를 튜닝하는게 일반적입니다.
댓글목록
등록된 댓글이 없습니다.