Download presentation
Presentation is loading. Please wait.
1
How I Approach Tuning a SQL Statement
SQL 문장 Tuning 접근법 : William Scott 이란 분이 메타링크 Tip 란에 올리신 글을 단순 번역 한 글입니다. 문장 분석 1. Where 절을 검토 한다. Where 절은 크게 Rows 를 제한 하는 것과 Table 간의 Join에 사용된다. 2. 후보 Driving Table 을 정한다. 가장 적은 Rows 를 가져오는 [ 가장 제한적 (where)절을 가진 ]테이블을 선택 후보가 2개 이상 시에는 한 개 찍기 3. From 절의 모든 Table 을 List 하고, 후보 Driving Table 을 시작으로 하여, Join 조건을 이용하여 모든 Table 간의 Join 을 진행 한다. 이것은 후보 Driving Table 로 시작된, Database 가 접근 해야만 하는 테이블 순서 리스트롤 보여준다. 4. Drving Table 의 인덱스를 찾고, 인덱스 혹은 Full Table scan 을 이용하는 것이 좋을지 결정 하고, Optimizer가 선택한 Index 보다 좋은 Index 가 있다면 인덱스 Hint 사용을 통해서 보다 좋은 Index 를 사용하도록 한다. Full Table Scan 이 최적이라면, Parallel Hint 추가를 고려한다. 5. 제한적 Where 절을 가진 Table 을 우선적으로 Join 하려고 한다. [ 제한적 Where 절이 없는 Table 보다 우선적으로 ]
2
How I Approach Tuning a SQL Statement
SQL 문장 Tuning 접근법 이제 하나 이상의 테스트가 필요한 후보 실행 계획이 생겼다 Plan 비교 A 결과로 생성된 후보 계획과 문제의 실제 실행 계획을 비교 한다. 다른 Driving Tables 과 다른 Join 순서를 사용을 고려하여, 실제 데이터를 자세히 살펴본다. 실행계획 간의 비교 및 자세한 분석을 하고, 주관적으로 최적의 계획에 도달 한다. C. 테스트 하기 가장 효과적인 Hint 는 ORDERED Hint 다. 특히, From 절에 Table 이 많을 때 잘 작동 한다. /** ordered */ Hint 를 Select 다음에 추가 하고, B.3 에서 도출된 실행 계획에 맞추어, From 절 내에 순서대로 List 한다. /** FULL(Driving Table alias) */ 과 같이 다른 Hint 추가 역시 Optimizer 가 적절한 Driving Table 을 이용하게 하는 좋은 방법이다. 상기의 Hint 를 이용한 실행계획의 실행 만일, 실행계획이 좋다구 판단되면, 실제 실행. Set Timing ON, Set AUTOTRACE ON
3
How I Approach Tuning a SQL Statement
SQL 문장 Tuning 접근법 기존과 신규 문장을 얼마나 시간이 소요되는지 파악 하기 위해서, 여러 차례에 걸쳐 실행 한다. Autotrace 의 Summary Block 수는 성능의 좋은 척도이다. 적은 블록에 접근 할수록, 성능상 좋다. D. Tuning Hints and Tips 실행 계획에 영향을 줄 수 있는 다른 많은 Hint 와 Techniques 가 있다. Merge Join 보다는 Hash join 이 거의 항상 성능상 좋다는 것을 기억 하자. Nested Loop 는 몇 건의 Rows 를 가져올 때 좋다. Tuning sub-Select는 좋은 방법일 수 있다. 필자는 “IN ( SELECT …) or a NOT IN”을 대체하기 위해서 in-line view 를 종종 사용하고, Hash Join 에서 몇 천 번의 Nested Loop 를 피함으로써 눈에 띄는 성능 향상을 성취하였다.
Similar presentations