8i DB에서 9i DB로 바꾸고 난뒤 동일 쿼리문장의 속도가 느려지네요. 8i는 옵티마이져가 rule베이스였지만, 9i에는 cost베이스만 사용기 때문인데요. 동일 쿼리문장의 실행계획이 다르게 나옵니다. 옵티마이져에게 맡기기에는 속도가 너무 안나오네요. 더 빨라져야 하는데 더 느려지니, 쿼리문장에 hint를 써서라도 8i 때의 실행계획이 나오도록 작업을 해줘야할지 아님 다른 방법이 있는지 의견을 듣고자 합니다. 참고하여 반영하도록 하겠습니다.
by 현
[2010.09.14 09:26:12]
일단 통계정보는 수집하셨나요?
통계정보를 수집하시고 그래도 실행계획이 원하는대로 안잡히면 힌트를 써야죠.
by 나그네
[2010.09.14 09:50:38]
Optimizer Mode를 Rule로 바꾸면 되지 않을런지?
by 현
[2010.09.14 10:01:50]
Optimizer Mode를 Rule로 바꾸거나 choose로 바꾸면 지금 그 현상은 해결이 되겠지만 근본적인 해결은 아닌듯 싶습니다.
어차피 운영db를 바꿨으리라 생각은 되질 않으니 개발db에서 cbo,choose 모드에서 충분히 테스트 하시고 운영으로 옮기시길 권해 드립니다.
by 知音
[2010.09.14 12:15:43]
analyze 를 통해서 통계정보를 재생성하는 것이 맞을 듯 하네요..
by 지나가는 이
[2010.09.14 18:18:23]
저도 현님과 같은 생각 ^^
RBO보다는 CBO로 가야 하는게 당연한 말씀인거 같습니다.
또한 통계정보를 재생성하는것도... ^^;
또한 현재 8i에서 사용하던 SQL문장도 문제가 있는건 아닐까요??
조인되는 컬럼이라든지, 드라이빙이 먼저 되는 테이블이라던지...
실행계획을 보시고 또는 Trace를 떠서 (실행계획과 실제로 실행되는 Trace의 SQL문은 다를수 있기때문에...^^) 올바른 SQL문을 작성하는것이 정답인걸로 생각이 드네요..
by 이예진
[2010.09.14 18:20:39]
통계정보는 재성성 했지만, 속도에 진전이 없었습니다.
by 이예진
[2010.09.14 18:25:55]
^^
데이터의 분포도가 다른 유저에 각각 동일 SQL문장을 적용하면
유저마다 속도가 느린것도 있고 괜찮은 것도 있고 그렇습니다.
SQL문장을 다시 보아야겠습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.