3.1.2.4. 실행계획의 고정화(Stability)
- 아우트라인(Outline)
\- 과거에 수립되었던 실행계획의 요약본을 저장하고 있다가 이것을 참조하여 실행계획을 수립하는 기능
\- 일반적으로 통계정보의 변화에 따라 변동되는 실행계획을 최적화된 실행계획으로 고정시키고자 하는 용도로 사용
- 아우트라인 사용의 바람직한 방법
\- 잘 정비된 옵티마이징 팩터와 적절한 SQL을 기반으로 대부분의 경우는 옵티마이저에게 맡기고
\- 특별히 문제가 있는 경우에 대해서만 아우트라인으로 통제
■ 카테고리(Category) : Outline의 선별적인 적용을 가능하게 하기 위하여 지정한 그룹
가) 아우트라인 생성과 조정
- DBMS_OUTLN, DBMS_OUTLN_EDIT 패키지의 프로시져로 아우트라인 생성 및 조정
■ CREATE_OUTLINEL 지정된 건을 공유캐시에서 찾아 아우트 라인을 생성한다.
■ CLEAR_USED: 지정된 아우트 라인을 제거한다.
■ DROP_BY_CAT: 지정한 카테고리에 속한 아우트 라인을 제거한다.
■ DROP_UNUSED: SQL 파싱에 사용된 적이 없는 아우트 라인을 제거한다.
■ UPDATE_BY_CAT: 어떤 카테고리를 새로운 카테고리로 변경한다.
■ GENERATE_SIGNATURE: 지정한 SQL 문에 대한 식별자를 생성한다.
나) 아우트 라인의 관찰
USER_OUTLINES | 생성되어 있는 아우트라인에 대한 정보 |
---|
USER_OUTLINE_HINTS | 생성되어 있는 아우트라인에 대한 힌트 정보 |
---|
다) 오라클 업그레이드 시에 적용
- 오라클 업그레이드 시 Outline 수집, 적용 절차
(1) 현재의 규칙기준으로 수행되는 SQL에 대하여 다음과 같이 특정 카테고리를 주고 아우트라인을 생성
ALTER SESSION SET CREATE_STORED_OUTLINES= category_name;
ALTER SYSTEM 구문 : 시스템 전역으로 적용
(2) 대부분의 중요한 SQL에 대해 아우트 라인이 생성되도록 가능하다면 오랜기간 동안 수집하는 것이 좋다.
또는 월 단위 이상이나 특정한 기간에만 수행되는 어플리케이션은 별도의 처리를 해주는 것이 좋다.
(3) 아우트 라인 생성을 종료 시키려면 CREATE_STORED_OUTLINES 파라미터를 FALSE로 지정
ALTER SESSION SET CREATE_STORED_OUTLINES= FALSE
(4) 업그레이드 후 DBMS_STATS 이용하여 통계정보 생성
(5) 필요 시 USR_STORED_OUTLINES 를 이용하여 아우트라인 적용(과거 실행 계획으로 복원)
ALTER SESSION SET USE_STORED_OUTLINES = category_name;
3.1.2.5. 옵티마이저의 한계
- 규칙기준 옵티마이저의 한계
통계 값을 고려하지 않고 규칙에 의해 예측하므로 데이터 량, 분포에 따른 정확한 예측을 할 수 없음
- 비용기준 옵티마이저의 한계
완벽할 수 없는 통계 정보를 바탕으로 정확한 처리 범위를 예측할 수 있느냐에 대한 한계
\- Equal(=)연산이 아닌 'LIKE, <,>,BETWEEN'등의 사용 시 정확한 분포도 계산이 어려움.
\- 히스토그램이 없어 컬럼내의 모든 값이 분포도가 같다고 가정한다면 - 오차 발생 가능성 내포
결합된 컬럼에 대해 분포도를 보유할 수 없음
- Histogram을 사용할 경우
- 상수가 아니라 변수인 상태에서 실행 계획이 수립되어야 한다면 활용가치가 없어짐
1 | 다양한 사용 형태를 만족할 수 있도록 종합적이고 전략적인 차원에서 적절한 인덱스나 클러스터링을 결정하고 |
---|
2 | 수준 높은 SQL을 구사하는 것 |
---|
이 중요함