ORACLE PARAMETER
// ※ Parameter는 Hint보다 우선권이 낮음.
# Index 제어
- OPTIMIZER_INDEX_CACHING (Default : 0)
Index가 메모리에 캐싱되어 있을 확률을 의미. 80 ~ 95가 적당.
- OPTIMIZER_INDEX_COST_ADJ (Default : 100)
Index Cost를 조정하는 역할을 함. 즉, 값을 50으로 바꾸게 되면 Index Cost를 1/2로 감소시킴.
그만큼 Index Scan이 선택될 확률을 높임. 5 ~ 10이 적당.
# CBQT(Cost Based Query Transformation) 제어
- _OPTIMIZER_COST_BASED_TRANSFORMATION (Default : Linear)
CBQT의 동작여부를 지정.
- _OPTIMIZER_PUSH_PRED_COST_BASED (Default : True)
Cost Based Join Predicate Pushing의 동작여부를 지정.
- _OPTIMIZER_CONNECT_BY_COST_BASED (Default : True)
Cost Based Connect By Transformation의 동작여부를 지정.
# Prefetch
- _INDEX_PREFETCH_FACTOR (Default : 100)
이 값을 더 작게 설정할수록 옵티마이저는 인덱스 Prefetch를 더 선호하게 됨.
- _DB_FILE_NONCONTIG_MBLOCK_READ_COUNT
한 번에 최대 몇 개 블록을 Prefetch할지를 지정한다. 1로 지정하면 Prefetch 기능이 정지됨.
- 테이블 Prefetch
+ _TABLE_LOOKUP_PREFETCH_SIZE (Default : 40)
+ _TABLE_LOOKUP_PREFETCH_THRESH (Default : 2)
+ _MULTI_JOIN_KEY_TABLE_LOOKUP (Default : TRUE)
# Push Predicate 제어
- _PUSH_JOIN_PREDICATE (Default : TRUE)
뷰 Merging에 실패한 뷰 안쪽으로 조인 조건을 Pushdown하는 기능을 활성화함.
- _PUSH_JOIN_UNION_VIEW (Default : TRUE)
union all을 포함하는 Non-mergeable View 안쪽으로 조인 조건을 Pushdown하는 기능을 활성화함.
- _PUSH_JOIN_UNION_VIEW2 (Default : TRUE)
union을 포함하는 Non-mergeable View 안쪽으로 조인 조건을 Pushdown하는 기능을 활성화함.
# Result Cache (11g 이상)
- RESULT_CACHE_MODE (Default : MANUAL) [MANUAL | FORCE]
Result 캐시 등록 방식을 결정
// manual : result_cache 힌트를 명시한 SQL만 등록 force : no_result_cache 힌트를 명시하지 않은 모든 SQL 등록
- RESULT_CACHE_MAX_SIZE
SGA 내에서 result_cache가 사용할 메모리 총량을 바이트로 지정. 0으로 설정하면 이 기능이 작동하지 않음.
- RESULT_CACHE_MAX_RESULT (Default : 5)
하나의 SQL 결과집합이 전체 캐시 영역에서 차지할 수 있는 최대 크기를 %로지정
- RESULT_CACHE_REMOTE_EXPIRATION (Default : 0)
remote 객체의 결과를 얼마동안 보관할지를 분 단위로 지정.
remote 객체는 result 캐시에 저장하지 않도록 하려면 0으로 설정.
# 그 밖의 Parameter
- OPTIMIZER_PERCENT_PARALLEL (Default : 0)
이 값의 수치가 높을수록 parallel을 이용하여 풀 테이블 스캔으로 테이블을 액세스하려고 함.
- OPTIMIZER_MODE
옵티마이저 모드 설정
- HASH_AREA_SIZE
해쉬 조인할 때 PGA에 드라이빙할 수 있는 공간의 크기 설정
- SORT_AREA_SIZE
소트 머지 조인할 때 PGA에 드라이빙할 수 있는 공간의 크기 설정
- DB_FILE_MULTIBLOCK_READ_COUNT (Default : 128) // db_block_size가 8k일 때, 최대값 128
이 값의 수치가 높을수록 Optimizer가 Full Scan하려는 비중이 높아짐. (소트 머지 또는 해쉬 조인하려는 경향이 커짐.)
- WORKAREA_SIZE_POLICY (Default : AUTO) [AUTO | MANUAL]
Optimizer가 *_AREA_SIZE를 자동으로 또는 수동으로 PGA 관리함을 설정
- OPTIMIZER_DYNAMIC_SAMPLING (Default : 1 > 9i, 2 > 10g이상) [ 0 ~ 10 ]
이 값의 크기가 클 수록 더 정확한 선택도와 카디널리티를 구하기위해 추가적인 Recursive SQL을 실행하며 OLTP 환경에서는 Default 값 이상으로 높이지 않음. 10g의 경우 통계정보가 없다면 '다이내믹 샘플링' 이 적용됨.
# Hidden Parameter
- _b_tree_bitmap_plans (Default : TRUE) [TRUE | FALSE]
bitmap conversion이 일어나게 할지 설정
- _or_expand_nvl_predicate (Default : TRUE) [TRUE | FALSE]
조건절에 nvl 사용 시 or expand가 일어나게 할지 설정
- _direct_path_insert_features (Default : 0)
direct path i/o가 발생하게 할지 설정
- _nlj_batching_enabled (Default : 1)
NL조인할 때 physical read할 때와 logical read할 때의 정렬 순서가 달라질 수 있는데 해당 파라미터를 0으로 바꿔 해결할 수 있음. (NL조인이 10g의 NL조인과 같은 방식으로 동작한다고 함.)
// NO_NLJ_BATCHING 힌트로도 해결할 수 있음.
- _nlj_batching_misses_enabled (Default : 1)
해당 파라미터를 0으로 설정 시, Batching NL조인은 그대로 유지하면서 bufferCache에 존재할 때와 그렇지 않을 때의 결과가 같을 수 있도록 함.
- _optimizer_batch_table_access_by_rowid (Default : TRUE) (12c 이상)
특정 테이블에 대해 배치 작업을 하고자 할 때 rowid로 접근할지 설정(?)
- _no_or_expansion (Default : FALSE)
or expand 사용할지 설정
- _optimizer_unnest_scalar_sq (Default : TRUE) (12c 이상)
TRUE로 설정 시, 스칼라 서브쿼리를 unnseting 할지 여부를 옵티마이저가 결정함.
FALSE로 설정 시, 옵티마이저가 이 기능을 사용하지 않지만, 사용자가 unnest 힌트로 유도할 수 있음.
- _optimizer_native_full_outer_join (Default : FORCE)
TRUE로 설정 시, 옵티마이저가 Native Hash Full Outer 조인을 사용할 수 있게 함.
FALSE로 설정 시, 옵티마이저가 Native Hash Full Outer 조인을 사용할 수 없게 함.
- _complex_view_merging (Default : TRUE)
TRUE로 설정 시, view가 merging 할 수 있게 함.
FALSE로 설정 시, view가 merging 할 수 없게 함.
- _optimizer_compute_index_stats (Default : TRUE)
TRUE로 설정 시, 인덱스 신규생성이나 리빌드 시에 통계정보를 갱신하게함.
FALSE로 설정 시, 인덱스 신규생성이나 리빌드 시에 통계정보를 갱신하지 않게함.
- _optimizer_gather_stats_on_load (Default : TRUE) (12c 이상)
batch load 시 테이블 통계정보 업데이트할지 여부 설정하는 파라미터
보통 OFF 시키고 수동으로 통계정보 업데이트한다고 함.
- _optimizer_gather_stats_on_load_index (Default : TRUE) (12c 이상)
batch load 시 index 통계정보 업데이트할지 여부 설정하는 파라미터
보통 OFF 시키고 수동으로 통계정보 업데이트한다고 함.
- _query_execution_cache_max_size (Default : 4194304?) (10g 이상?)
스칼라(scalar) 서브쿼리 8i, 9i 기준으로는 256개 엔트리를 캐싱, 10g이후로는 입력과 출력 값 크기,
_query_execution_cache_max_size 파라미터에 의해 사이즈를 결정함.
- _optimizer_group_by_place (Default : TRUE)
// Keep Buffer (Full Scan 해야하는 테이블을 버퍼에 올리는 방법) -> alter table table_name storage(buffer_pool keep);
// Keep Buffer 쓸 때 인덱스도 같이 올려야할지 고려
// ※ Full Scan Buffer Cache 힌트 CACHE, NO_CACHE
// http://haisins.epac.to/wordpress/wp-content/uploads/1/cfile27.uf.263DED3E5683308203110E.pdf
'DA > 튜닝' 카테고리의 다른 글
[DA/튜닝] PostgreSQL 튜닝 관련 Parameter (0) | 2021.01.08 |
---|---|
[DA/튜닝] MySQL & MariaDB 튜닝 관련 Parameter (0) | 2020.08.25 |
[DA/튜닝] 날짜 Table 생성 (0) | 2019.07.18 |
[DA/튜닝] 다중행 결과 값을 단일행으로 변환 (0) | 2019.07.15 |
[DA] Static SQL 과 Dynamic SQL (0) | 2019.06.07 |