멋진 삶을 꿈꾸며

클라이언트와 데이타를 주고 받는 전문서버로
오라클 10g를 사용하고, TMax Proframe을 이용하고 있는데

상담이력조회에서 조건 추가를 해달라는 현업부서요청에 따라
바인딩 변수를 하나 추가를 하였다..

분명 같은 쿼리 조건으로 오렌지상에서 실행시 플렌은 분명히 인덱스를
타는것을 확인 했으나, 실제 클라이언트를 통하여 전문서버에서 실행되었을때는

이상하게 속도가 늦게 나오는 현상발생, 인덱스힌트를 주고도 해보고, 이틀동안 삽질.
나와 비슷하게 고민한 글을 접하고 원인을 찾았음( 뭐 다 오라클을 제대로 알지 못해서 그런거 ㅡ.ㅡ;)

요지는 10g 바인딩 변수 사용시 데이타 양에따라 10g 내부적으로 사용되어지 인덱스가 달라진다
즉 바인드 변수에 NULL값 입력시 전체를 대상으로 조회하라는 부분이 문제였다.(바인드-피킹(bind-peeking) )

SELECT
...(중략)
WHREE
...(중략)
AND ( (:cntct_p_eno IS NULL) OR (S1.CNTCT_P_ENO=:cntct_p_eno) ) -- NULL입력시 전체대상
AND ( (:cs_no IS NULL) OR (S1.CS_NO=:cs_no) )                              -- NULL입력시 전체대상

해결 특정인, 전체 대상의 두개의 조건으로 쿼리를 나누고 런타임시에 두 쿼리중 하나를 사용하도록 결정

참고: http://blog.naver.com/hypermin?Redirect=Log&logNo=70027026575

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
Posted by 소리나는연탄.

Leave your greetings here.