튜닝 주제는 다음과 같이 3가지가 있다.
SQL을 빠르게 실행하기 위해선, I/O 발생량
을 최소화
하고, PGA사용량
을 줄이는 것이다.
오라클은 B*TREE
를 사용한다.
Balanced
로, 좌우 균형이 맞도록 한다.
또한 오라클의 인덱스도 테이블과 마찬가지로 블록
사용
블록
: 오라클이 디스크
에 저장된 데이터를 메모리
로 꺼내와야 하고, 그 때 사용하는 최소 단위
블록의 개수
또는 접근 횟수
제일 윗 블록이 루트 블록
, 그 아래가 브랜치
, 제일 밑 블록이 리프 블록
랜덤 액세스(Random Access)
: 루트 블록->브랜치 블록->리프 블록
, 리프 블록->테이블 블록
의 접근
인덱스 수직 탐색(루트->리프)
의 경우도 필요한 데이터는 하나이고, 데이터 블록에서도 인덱스 한 건당 테이블 블록 한 건으로 매칭시퀀셜 액세스(Sequential Access)
: 리프 블록->리프 블록
최종 결과 집합으로 얼마
만큼 선택되는지가 중요필요한 구간
만큼만 스캔하도록 하고, 테이블로 접근한 데이터는 최대한 결과 집합
으로 선택버퍼 피닝
: 연속하여 같은 블록
을 방문할 경우 해당 블록을 얻는
과정을 생략
싱글 블록 I/O
: 한 번의 콜
을 요청할 때 한 개의 블록
만을 읽어 DB 버퍼 캐시
에 적재
멀티 블록 I/O
: 한 번의 콜
을 요청할 때 여러 블록
을 읽어 DB 버퍼 캐시
에 적재
멀티 블록 I/O의 블록 개수
를 결정하는 요소
익스텐트
가 가지는 블록의 개수db_file_multiblock_read_count
파라미터ex) 익스텐트 크기가 64KB, 블록 크기가 8KB라면, 8개의 연속된 블록을 가지도록 설정,
db_file_multiblock_read_count 값이 16이라면 멀티 I/O 블록 시 읽어들일 수 있는 블록 개수는 8개