태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Oracle SQL 튜닝 기법: TCF - Tuning by Cardinality Feedback

오라클 2008.01.24 20:10
Wolfgang Bretiling이라는 스위스를 기반으로 활동하는 Consultant가 있다. 이 사람의 전문 분야는 Oracle + PeopleSoft의 튜닝이다.

PeopleSoft과 같은 ERP 솔루션들은 Oracle과 무관하게, 아니 Oracle을 무시해서 설계된 Application으로 유명하다. 모든 DBMS에서 일관되게 동작 가능한 Application에 의한 필요악이라고나 할까... 이런 3rd Party Application의 튜닝에서 가장 큰 애로 사항이 쿼리를 직접 수정하는 것이 불가능하다는 것이다. 때문에 간혹 Oracle 관점에서의 튜닝이 불가능한 것으로 간주하기도 한다.

이 Wolfgang이라는 사람은 이런 상황에 착안해서 자신만의 쿼리 튜닝 기법을 개발했다. 하지만 쿼리 수정이 전혀 불가능한 상태에서 어떻게 (비교적) 자유롭게 쿼리를 튜닝할 수 있단 말인가?
놀랍게도 이 사람은 많은 시스템에서의 경험과 Oracle Optimizer에 대한 심도 깊은 지식을 기반으로 이것을 가능하게 하는 단순하면서도 심오한 방법을 체계화했다.

그 이름이 바로 TCF - Tuning by Cardinality Feedback이다. 풀어쓰면 "실행 예상 계획과 실제 실행 계획의 차이(Cardinality Feeback)에 의한 쿼리 튜닝 기법"이다. TCF는 다음과 같은 가정에 근거한다.

  • Oracle의 CBO는 Cardinality만 정확하면 나름대로 최적의 실행 계획을 생성한다.
  • Oracle의 통계 해석에서 오는 몇 가지 오류로 인해 Cardinality 계산이 비현실적인 경우가 있다.
  • 따라서, Oracle이 Cardinality를 잘 계산할 수 있도록 힌트를 주면 많은 경우 정상적인 실행 계획을 만들 것이다.


이런 가정 하에서 DBMS_STATS.SET_XXX 류의 메소드를 이용해서 Oracle이 최적의 Cardinality를 계산할 수 있도록 통계 값을 보정시켜주는 것이 이 TCF의 핵심이다. Oracle이 필요로 하는 Cardinality를 추론하게 해주는 것이 Explain Plan(실행 예상 계획)과 Execution Plan(실제 실행 계획)을 비교하고 해석하는 능력이다.

마침 Oracle 10g부터는 gather_plan_statistics 힌트나 statistics_level = all 과 함께 dbms_xplan.display_cursor 함수를 사용하면 TCF 적용에 필요한 데이터(실행 예상 로우 건수와 실제 실행 로우 건수)를 손쉽게 구할 수 있으니 이 Wolfgang의 TCF의 뛰어난 점을 Oracle이 수용한 것처럼 생각될 정도이다.

아래 URL에서 TCF 사용에 필요한 모든 이론적 도구를 얻을 수 있다.
http://www.centrexcc.com/papers.html

쿼리를 직접 수정할 수 없는 3rd party Application 튜닝에 최적의 도구를 하나 확보하게 된 셈이다.

PS) 이 TCF는 실제로 많은 엔지니어들이 자신도 인식하지 못하고 사용하고 있는 방법이다. 이런 것을 체계화하고 이론적 무장을 갖추는 능력이 부족한 우리 현실이 아쉬울 뿐이다.
신고
Trackbacks 7 : Comment 0

Write a comment

티스토리 툴바