문서유형ㅣ기술정보
분야ㅣ관리/환경설정
적용제품버전ㅣ7FS02PS
문서번호ㅣTADTI186
개요
본 장에서는 Optimizer가 실행 계획을 수립하는데 영향을 주는 파라미터에 대한 설명과 통계를 측정하는데 있어서 고려해야 할 사항에 대해 설명합니다.
방법
1. Optimizer Statistics 설정
1.1 Data Dictionary
통계 정보를 확인할 수 있는 Data Dictionary는 다음과 같습니다.
ALL_TABLES ALL_INDEXES ALL_TAB_STATISTICS ALL_TAB_COL_STATISTICS ALL_TAB_PARTITIONS ALL_TAB_SUBPARTITIONS ALL_IND_PARTITIONS ALL_IDX_SUBPARTITIONS
참고
통계 정보를 확인할 수 있는 다양한 Static view는 " Tibero 참조 안내서"의 "Static View"를 참고
1.2 파라미터
Optimizer가 실행 계획을 수립하는데 영향을 주는 파라미터의 설정에 신중해야 합니다. 운영 환경의 시스템 및 업무 특성을 파악한 후 해당 업무에 가장 효과적인 설정값을 정하는 것이 중요합니다.
개발 환경에서 테스트한 설정값들이 초반에는 운영 시스템에 적절할 수 있지만 운영 시스템의 사용량이나 기간이 증가할수록 데이터의 특성이 변경될 수 있습니다. 따라서 해당 업무들에 최적화되는 파라미터를 변경하면서 기준을 정해야 합니다.
다음은 Optimizer에 영향을 줄 수 있는 파라미터에 대한 설명입니다.
| 파라미터 | 설명 |
|---|---|
| OPTIMIZER_MODE |
Optimizer의 Cost 계산 동작을 결정하며 다음과 같이 다섯 가지 모드가 있음 (기본값: ALL_ROWS) • FIRST_ROWS_1 • FIRST_ROWS_10 • FIRST_ROWS_100 • FIRST_ROWS_1000 • ALL_ROWS
|
| CURSOR_SHARING |
• EXACT: SQL 문자열 전체가 완전히 일치하는 PP가 있는 경우 사용 • FORCE: SQL 문자열에서 상수들을 바인드 문자열로 변환하여 같은 PP를 사용할 수 있도록 해줌
|
| _OPT_JOIN_MEMORY_LIMIT |
|
| _USE_DYNAMIC_SAMPLING |
Dynamic sampling 사용 여부를 결정하는 파라미터 (기본 값: Y) • Y : Dynamic sampling을 사용 • N : Dynamic sampling을 사용하지 않음 |
| _DYNAMIC_SAMPLING_CONFIDENCE |
|
| ENABLE_HASH_JOIN ENABLE_MERGE_JOIN ENABLE_IDX_JOIN ENABLE_HASH_JOIN_FULL_OUTER |
|
| ENABLE_HASH_GROUPBY ENABLE_SORT_GROUPBY |
|
| _ENABLE_ISS |
Index skip scan 사용 여부를 결정하는 파라미터 (기본값: Y) • Y: 사용함 • N: 사용 안 함만약 N로 하면 힌트를 부여해도 Index skip scan 을 Plan으로 채택하지 않음 |
| _OPT_PGROUPBY_PUSH_RATIO |
|
| _OPT_BOUND_SELEC_ADJUST_DEGREE |
|
| _SAMPLE_SCAN_SKIP_BLK |
• N: 미사용 (기본값) • Y: 사용 |
| _EX_BLOCK_SAMPLING_LVL |
Block sampling 성능 개선을 위한 파라미터 • N: 미사용 (기본값) • Y: 사용 |
2. 통계 측정의 한계
2.1 부정확한 통계
샘플링 방식으로 수집된 통계는 실제 데이터와 차이가 나기 때문에 완벽한 통계라고 할 수 없습니다. 또한 이전에 수집 된 통계 정보가 정확한 상태로 유지된다고도 볼 수 없습니다. 만약 데이터 갱신이 갑자기 증가하거나 새로 생성되는 Object가 있을 경우 통계 수집을 해야 합니다.
이때 정확한 통계 정보를 가지고도 실행 계획이 비효율적으로 수립되는 가장 흔한 이유는 예측 Row 수가 부정확하기 때문입니다. 또한 정확한 통계 정보를 수집했어도 비효율적인 실행 계획을 수행하고 있다면 통계 정보의 오류가 아니라 통계 정보의 한계입니다.
예를 들어 쿼리 조건절에 사용하는 Like에 %로 계산을 한다면 통계 정보로는 정확한 Selectivity를 예측하기 어렵 습니다. 이런 경우 동적 샘플링을 이용하면 샘플링 과정에서 실제 조건에 들어간 값을 예측하는 효과를 볼 수 있습니다.
2.2 히스토그램 한계
히스토그램의 Bucket 개수가 한정되어 있기 때문에 Height-Balanced 히스토그램을 사용하면 발생 빈도가 낮은 값에 대한 정확한 분포도를 산정할 수 없습니다.
또한 히스토그램의 Bucket 내에 존재하지 않는 값에 대한 Cardinality는 부정확할 수 있다. 만약 Bind 변수를 사용하면 Bind peeking을 활성화하여도 Plan 생성 시점의 변수값과 수행 시점의 변수값이 다를 수 있으므로 역시 100% 정확성을 보장할 수는 없습니다.
2.3 잘못된 비용 산정
통계 정보를 바탕으로 조건절과 조인 조건에 대한 Selectivity와 Cardinality를 계산하고 이를 기준으로 Data Access 방법, Index와 Join 방법(Index, Nested loop, Sort Merge, Hash) 등의 비용을 계산합니다.
하지만 현재의 통계 정보가 Database의 실제 데이터 분포와 다를 수 있고, Selectivity와 Cardinality를 계산할 때 실제 데이터 분포와 일치하지 않을 수 있습니다.
2.4 샘플링 비율
일반적으로 샘플링 비율을 높이면 통계 정보의 정확도가 높아지지만 Null 값이 많고 데이터 분포도가 고르지 않을 경우 정확도가 떨어집니다.