메뉴 건너뛰기

bysql.net

2.A_Heuristic_Query_Transformation이란?

2011.09.20 01:01

AskZZang 조회 수:1497

2.A Heuristic Query Transformation 이란?

 

Heuristic : 사전적 의미에서 문제 해결에 있어 그 노력을 최소화하기 위해 사용되는 고찰이나 과정으로 정의.

특정 Rule을 적용하여 최적화를 진행하겠다는 의미.

이 개념은 SQL 자체의 성능을 최적화한다는 것과 Hard Parsing시에 Costing 과정에서의 부하를 제

거함으로써 Parsing의 성능을 빠르게 하겠다는 것의 두 가지 관점에서 의미가 있다.

 

           참고) 의사결정과정 단순화한 지침. 규약 휴리스틱은 문제를 해결함에 있어 그 노력을 줄이기 위해

             사용되는 고찰이나 과정을 의미. 오늘날 기업이 당면한 경영환경은 매우 복잡하고 변화가 심하다.

             기업이 어떤 사안의 의사를 결정하려면 다양한 변수를 고려해야 한다. 그러나 기업은 현실적으로

             정보의 부족과 시간제약으로 완벽한 의사결정을 할 수 없다. 제한된 정보와 시간제약을 고려해

             실무상 실현 가능한 해답이 필요하다. 이것이 바로 휴리스틱 접근법이다. 휴리스틱 접근법은 가장

             이상적인 방법을 구하는 것이 아니라 현실적으로 만족할 만한 수준의 해답을 찾는 것이다. 모든

             변수와 조건을 검토할 수 없기 때문이다. 휴리스틱은 정형적이며 포괄적이다. 즉 일정한 규칙과

             지침을 갖고 판단과 의사결정이 이뤄진다고 전체 상황·가정·전제조건 등을 모두 고려한다.

             일반적으로 사용되는 휴리스틱 접근법은 분석의 초기 단계에서는 모든 변수를 고려하지 않고 중요

             변수만을 분석하고 점차 변수의 범위를 넓혀 간다. 문제 상황을 여러 부문으로 구분하고 이를 각각

             분석해 가장 이상적인 방법을 구한 후 전체적인 관점에서 종합한다.

 

 

질문!! Query Transformation의 목적이 성능을 빠르게 하는 것인데 Costing 해보지도 않고 SQL을 변환시켜 버리면 위험하지 않을까 염려될 수 있다.??

 

l 특정 작업의 부하를 줄일 수 있는 가장 좋은 방법은 그 작업을 수행하지 않는 것이다.

     SELECT COUNT(*) FROM tab1 ORDER BY col1;

     COUNT(*)를 하는데 굳이 ORDER BY를 해야 할까?

     이런 상황에서 ORDER BY의 부하를 없애는 가장 좋은 방법은 ORDER BY를 수행하지 않는 것이다.

     => 바로 이것이 Heuristic Rule 이다.

 

 

l 꼭 필요한 일만 해라

     SELECT A.고객번호, A.고객명

     FROM  고객 A, 공통코드 B

     WHERE A.고객구분코드 = B.고객구분코드(+);

    

     단순히 고객번호와 고객명을 SELECT 하는데 공통코드 테이블의 조인이 필요할까?

     오라클은 공통코드 테이블에 UNIQUE 인덱스만 있으면 위의 SQL에서 공통코드 쪽을 삭제.

 

앞으로 나올 대부분의 Heuristic Transformation은 위에서 언급한 2가지의 격언에 충실하며 Costing이 전혀 필요 없다는 것을 알 수 있다.

성능향상을 위하여 SQL을 변환시키지만 Hard Parsing시의 부하를 감안하여 Costing을 하지 않는 것이 Heuristic Transformation이 중요한 이유이다.

 

Rule을 모르는 상태에서 Transformer가 원본 SQL을 변환시키는 경우 바뀐 SQL과 실행계획을 결코 이해할 수 없다. 이것이 바로 Heuristic Transformation 과정의 이해가 필수적인 이유이다.