I/O 비용 모델
- I/O 비용 모델에서 비용은 디스크 I/O Call 횟수를 의미한다.
- 인덱스를 경유한 테이블 엑세스 시에는 Single Block I/O 방식이 사용된다.
이는 읽게 될 물리적 블록 개수가 엑세스 비용과 일치한다.
- cost
= blevel + (리프 블록 수 x 유효 인덱스 선택도 ) + (클러스터링 팩터 x 유효 테이블 선택도)
Full Scan에 의한 테이블 엑세스 비용
- 테이블을 Full Scan 할 때는 HWM 아래쪽 블록을 순차적으로 읽어 들이는 과정에서 발생하는
I/O Call 횟수로 비용을 계산한다.
- Multiblock I/O 단위를 증가시킬수록 I/O Call 횟수가 줄고 예상 비용도 준다
I/O 비용 모델의 비현실적인 가정
- Single Block I/O 와 Multiblock I/O는 비용이 같다.
- 캐싱 효과를 전혀 고려하지 않는다.
- 이를 보정하기 위한 8버전 부터 제공된 파라미터
● optimizer_index_cost_adj
- 이 파라미터는 인덱스 탐색 비용을 조정하고자 할 때 사용하며, 설정할 수 있는 값의
범위는 1 ~ 10000 이다. 기본 값으로 설정된 100이란 수치는, 한 번의 I/O Call을 통해
single block read 방식으로 한 블록을 읽는 비용과 multiblock read 방식으로
여러 블록을 읽는 비용을 같게 평가하라는 뜻이다.
- 이 값을 낮게 설정할수록 옵티마이저는 테이블 스캔보다 인덱스를 이용한
테이블 엑세스를 선호하게 된다.
● optimizer_index_caching
- NL 조인에서 inner 쪽 인덱스 블록이 캐싱돼 있을 가능성을 옵티마이저에게 알려주는
파라미터이며, IN-List Iterator 방식으로 인덱스를 탐색할 때 읽게 되는 인덱스 블록
엑세스 비용에도 영향을 미친다.
- 설정할 수 있는 값의 범위는 0 ~ 100이며, 이 값을 높게 설정할수록 옵티마이저는
인덱스를 이용한 NL 조인을 선호하게 된다.
CPU 비용 모델
- 모든 데이터베이스 오퍼레이션은 CPU를 사용하며, 경우에 따라서는
I/O 보다 성능에 더 큰 영향을 끼치기도 한다.
- 블록 I/O가 소량인데도 쿼리 수행 시간이 상당히 오래 걸리는 경우
● 해시 조인할 때, 해시 체인에 달린 레코드가 많아 해시 체인을스캔하는 부하가 심할때
● 캐싱된 블록을 반복적으로 읽는데, 한 블록 내에서 매번 비효율적으로 많은 레코드를
스캔할때
● 버퍼를 Pin한 상태에서 같은 블록을 반복 엑세스할 때
● 다량의 레코드를 읽으면서 건건이 여러 개의 사용자 정의 함수를 반복 호출할 때
● 메모리 소트를 반복할 때
- 다소 CPU 사용량이 증가하는 경우
● 조건절 개수가 아주 많을 때
● 조건절이나 select-list에 연산 집약적인 작업을 많이 포함할 때
- CPU 비용 모델에서 비용계산식
cost = ( #SRds * sreadtim + #MRds *mreadtim + #CPUCycles / cpuspeed ) / sreadtim
CPU 비용
- CPU 비용 모델에서 말하는 비용은, 쿼리의 예상 총 수행 시간을 single Block I/O 시간 단위로
표현한 것이라고 할 수 있다.
'ORACLE > SQLP' 카테고리의 다른 글
성능고도화 4-1. 쿼리 변환이란 (0) | 2016.12.26 |
---|---|
성능고도화 3-8. 통계정보2 (0) | 2016.12.26 |
성능고도화 3-6 히스토그램 (0) | 2016.12.26 |
성능고도화 3-5. 카디널리티 (0) | 2016.12.26 |
성능고도화 3-4. 통계정보1 (0) | 2016.12.26 |