클라이언트에 따라 실행계획이 달라질수 있나요? 0 11 1,195

by 김종석 [Oracle 기초] [2017.06.28 08:42:54]


토드에서 플랜떠도 문제없고 속도도 잘나오는데 서버에서 실제 실행속도가 많이 느립니다. 

토드 :0.5초 , 실제 서버 실행시간 : 10분 .. 

 

테이블 하나를 풀스캔 타는걸로 보이고 연산자를 바꾸거나 힌트를 주면 다시 빨라 지기는 하는데 원인이 뭔지 모르겠습니다. 

 

감사합니다.

 

by jkson [2017.06.28 09:00:56]

토드에서는 500라인 먼저 보이게 세팅이 되어있죠. 그래서 plan이 first_rows로 풀리게 될 가능성이 높습니다.

웬만하면 nested loop로 풀리려고 할 거구요.

실제 프로그램에서는 부분범위처리 해놓지 않는 이상 all_rows로 풀릴 가능성이 있겠죠.

토드에서는 500라인 우선 가져오게 nested loop로 프로그램에서는 조회하는 데이터량이 많아서

fullscan으로 풀린 것 같네요.


by 마농 [2017.06.28 09:02:25]

바인드변수를 사용하는 쿼리인데 토드에서는 상수조건으로 테스트 한건 아닌지요?


by jkson [2017.06.28 09:07:16]

바인드변수 이야기하신 거 보니

예전에 이런 경우가 있었어요.

토드에서 쿼리 만들 때는 문자형으로 바인드변수값 넣어줬는데

프로그램에서 돌릴 때 숫자형으로 줬던가.. 여튼 강제로 형변환이 일어나면서 인덱스를 사용 못 하게되는..

그런 경우가 아닌지도 테스트 해보시면 좋을 것 같네요.


by 김종석 [2017.06.28 09:10:01]

바인드 변수는 사용 합니다만 문자형이 맞는데요. 그문제는 아니라고 보는게.. 써놨듯이 힌트를 주거나 연산자를 바꾸면 잘 나와서요. 


by 마농 [2017.06.28 09:12:00]

서버에서 바인드 변수 사용했듯이 토드에서도 바인드 변수 사용한게 확실한가요?
바인드 변수 사용을 상수값으로 바꾸어 테스트 하고, 똑같이 테스트 했다고 생각하는데 절대 똑같지 않습니다.


by 김종석 [2017.06.28 09:11:49]

결과는 한건정도 나오는 쿼이고 .. 부분 범위처리 문제는 아닌거 같습니다.


by jkson [2017.06.28 09:15:07]

한 건 정도 나오는 쿼리면.. 부분범위 처리 문제는 아닐 것 같네요.

토드에서 접속한 서버랑 말씀하신 서버라는 것이 동일한 서버 맞죠?

말씀하신 서버라는 것은 운영 프로그램상에서 느리다는 것인가요?


by 김종석 [2017.06.28 09:30:50]

마농님 말씀대로 바인드 변수로 바꾸고 하니까 토드에서도 느리네요 . 결과가 있을때와 없을때가 또 다르네요. 감사합니다 .여러부들. 

같지않다는건 원래 알았는데, 보통 토드에서 테스트할때는 스트링으로 바꾸고 하다보니 . 특히 마농님 감사합니다.  


by jkson [2017.06.28 09:36:43]

귀신같이 잡아내시네요ㅎㅎ

바인드피킹시에 fullscan으로 실행계획 잡혔나보네요?

그런데 바인드변수로 쿼리 실행했을 때 결과가 있을 때와 없을 때가 다르다는 게 잘 이해가 안 되는데

바인드변수로 처리할 때 실행계획이 fullscan이면 어떤 값이 들어가든 동일해야 하는 것 아닌가요?

약간 이해가 안 되네요.


by 마농 [2017.06.28 09:39:45]

사용하신 쿼리를 보여주시면 비효율 제거해 드립니다.


by jkson [2017.06.28 09:43:18]

ㅋㅋㅋ 마농님 무슨 업자 같은ㅋㅋㅋ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입