'sql 튜닝'에 해당되는 글 1건

  1. 2008/11/12 TOAD 의 SQL Optimizer 를 이용하여 sql 쿼리 튜닝하기 (3)
매번 jdbc 에 sql 코딩을 할때마다, 불안한 마음이 한 구석에 있었다.

내가 만든 쿼리가 과연 최적의 쿼리일까?
대용량의 데이타를 처리하게 된다고 치면, 이 쿼리가 과연 제 속도를 낼 수 있을까?

라는 막연한 불안감말이다.

이런, 불안감을 해소시켜 줄 방법을 꾸준히 생각해왔다.

물론, 가장 좋은 방법은 제대로된 쿼리를 짜는 것이겠지만, 나같이 디비에 익숙하지 않은 초보자라면,
툴에 의지해 보는 것도 좋은 해결책이 되지 않을까 하여 툴을 검색해보았다.

수소문해서 구해본 툴로는 Toad 9.0 버전부터 포함되기 시작한 Sql Optimizer 였다.
Toad 를 사용한것이 2년 정도 된것 같은데, 이런 툴이 있는지도 몰랐던 나는 아직도 우물안 개구리일뿐이다.
(지금껏 사용한 버전은 8.0 이어서, Sql Optimizer 가 포함되어 있지는 않았다는 변명은 해보자.. :~)

그러면 본론으로..
select * from b2b_newsroom  where seq = 831
와 같은 쿼리를 작성했다고 치자.

이 쿼리를 Sql Optimizer 를 사용하여 분석해보고, 더 나은 쿼리를 찾아보자.

Toad 의 sql editor 에 쿼리를 입력하고, 'Sql Optimizer' 버튼을 클릭하면 화면이 달라진다. 오오~
버튼이 뭔지 모르겠다면, 상단 메뉴의 DataBase --> Optimize --> Sql Optimizer 를 선택하면 된다.
단축키요? 오오.. 저도 궁금합니다..

어쨋든 화면을 보자.

디폴트 탭으로 열려진 SQL Detail 에서 3가지의 화면으로 나누어지는 것을 볼 수 있다.

Scenario Explorer : sql editor 에 입력한 쿼리를 original SQL 로 등록해두고, new Scenario 생성하여 여러 방법으로 수정한
쿼리들과 퍼포먼스를 비교해볼 수 있다.
자세한 퍼포먼스 비교법은 다음으로 미루자. 사실 공부하는 중이기 때문에..:)
Sql Text : 내가 입력하거나, 등록한 쿼리를 보여준다.
Excution Plan, Describe Detail, Alert : 내가 작성한 쿼리의 실행 계획 및 테이블의 세부 정보를 보여준다.


좌측 맨 상단의 Optimize 버튼을 눌러보자.
아래와 같은 화면으로 전환이 될 것이다.

위에서 작성했던 'select * from b2b_newsroom  where seq = 831' 쿼리가 기억나는가?
이 쿼리를 실행했을때, 발생할 예상 Cost 비용을 볼 수 있다.

재밌게도, Sql Optimizer 에서
select /*+ INDEX_JOIN(B2B_NEWSROOM) */ *  from b2b_newsroom  where seq = 831
라는 쿼리로 변경하기를 추천하고 있다.

내가 작성한 쿼리는 실행 비용이 21인데 반하여, Sql Optimizer 가 추천한 쿼리는 비용이 2 밖에 되지 않는다.
이게 사기가 아니라면, 내가 짠 쿼리와 같은 결과를 리턴하면서도, 10배나 빠른 쿼리를 알려줬다는 것이 되겠다..
(후후..여러번 다른 쿼리로 테스트해본 결과 추천 쿼리가 매번 최적의 쿼리는 아니었다는 것을 유념하자. :~)

그러면 이 쿼리 두개를 실제로 실행하여 퍼포먼스를 비교해보자.
(실행할 쿼리에 체크를 하고 Excute 버튼을 클릭하자.)

select * from b2b_newsroom  where seq = 831
이 쿼리는 831 을 가진 seq를 찾기 위해 테이블을 741번재 줄까지 뒤졌으나,

select /*+ INDEX_JOIN(B2B_NEWSROOM) */ *  from b2b_newsroom  where seq = 831
인덱스를 사용한 이 쿼리는 26 번 밖에 뒤지지 않았다.

뭐, 나머지 값들을 구구절절하게 보지 않아도 2번째 쿼리가 더 좋다는 결론을 내릴 수 있겠다.. -_-;

'New Scenario' 를 통하여 쿼리를 등록하면, 최초에 내가 작성한 원래의 쿼리 와 옵티마이저가 추천한 쿼리,
등록한 쿼리들을 한꺼번에 비교할 수 있다.

....
나처럼, sql 작성에 자신이 없는 자들은 한번 사용해 보면 좋을 것 같은 툴이라 소개해보았다.
다음 포스트때는 좀더 세세하게 툴을 가지고 놀아봐야겠다.



Posted by utsman 트랙백 0 : 댓글 3