토드 SQL 속와 프로그램에서 속도 차이가 나는이유가..뭔가요? 0 4 6,501

by 손님 [Oracle 기초] [2010.10.04 17:55:06]


아이바티스를 이용해서..
SQL를 작성하고..실행하면 .. 8초 걸리는게

토드 같은대서는 1초면 나옵니다.

아이바티스 쿼리에 힌트도 줘봣는대..

여전이 느리네요..

왜 토드같은 툴로 돌릴때와 프로그램에서 돌릴때
속도 차이가 나나요?
by 현 [2010.10.04 18:06:18]
몇가지로 나누어서 생각을 해 봐야겠지만,
가장 많은 경우는 세가지 정도로 나올 듯 합니다.

첫째는 토드로 실행 할 때는 메모리에서 나오는 경우입니다.
메모리에서 데이터를 읽어 오면 빠르다는건 아시죠?
처음 조회할 땐 늦게 나오지만 두번째 조회 이후일 가능성입니다.

두번째는 바인드 변수 문제일 가능성입니다.
아이바티스에서는 리터럴(혹은 바인드)변수로 쿼리를 수행하시고 토드에서는 바인드(혹은 리터럴)변수로 수행할 경우 실행 계획이 다르게 풀릴 가능성이 있습니다.

세번째는 아이바티스 문제입니다.
아이바티스가 무엇인지 몰라서 정확히 뭐라 말씀은 못드리겠으나
아이바티스 관련된 부분에서 시간이 걸릴 수도 있겠네요..

기본적으로 토드에서 잘 돌때 플랜 떠보시고,
아이바티스 환경에서 플랜을 떠 보셔서 비교해 보세요.
두개의 플랜이 동일하다면 트레이스도 함 떠서 보시구요...

by 마농 [2010.10.04 18:14:31]
한가지 더 추가합니다.
전체자료를 패치할때와 일부자료만 패치할 경우 다를 수 있습니다.
- 토드의 기본 패치 사이즈가 500으로 되어 있습니다.(500건만 일단 패치하고 대기)
- 즉 500건 패치하는데 1초가 걸린 경우 8초면 약 4000건의 자료가 나올것으로 예상힐 수 있음.

by XT [2010.10.04 19:08:53]

토드에서 바인드변수(:A) 이렇게 했더니 프로그램과 똑같이 느리네요.
이런건 어덯게 해결 하는지 아시나요?

by 현 [2010.10.04 19:38:09]
그건 리터럴변수일때랑 바인드 일때랑 실행계획이 달라서 생기는 문제입니다.
리터럴일 때는 정확히 어떤 값이 들어온지 알기 때문에 실행계획을 거기에 따라 세우지만,
바인드 변수일 때는 어떤 값이 들어 올지 모르기 때문에 범용적(?)인 실행계획을 세우게 됩니다.

님께서 어떤 실행계획으로 풀리는 것을 알고 있는 경우엔 힌트 등을 사용해서 제어해 주시면 됩니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입