제대로 정리하기 전에, 학습삼아 노트필기식으로 정리합니다.

그냥 혼자 공부하며 정리하는 정도..

 

- 2013.03.19

 


인덱스 원리와 활용

인덱스 구조

  • 범위 스캔
  • 인덱스 기본 구조
  • 인덱스 탐색
  • ROWID 포맷

인덱스 기본 원리

  • 인덱스 사용이 불가능하거나 범위 스캔이 불가능한 경우
  • 인덱스 컬럼의 가공
  • 묵시적 형변환

다양한 인덱스 스캔 방식

  • Index Range Scan
  • Index Full Scan
  • Index Unique Scan
  • Index Skip Scan
  • Index Fast Full Scan
  • Index Range Scan Descending
  • And-Equal, Index Combine, Index Join

테이블 Random 액세스 부하

  • 인덱스 ROWID에 의한 테이블 액세스
  • 인덱스 클러스터링 팩터
  • 인덱스 손익분기점

테이블 Random 액세스 최소화 튜닝

  • 인덱스 컬럼 추가
  • PK 인덱스에 컬럼 추가
  • 컬럼 추가에 따른 클러스터링 팩터 변화
  • 인덱스만 읽고 처리
  • 버퍼 Pinning 효과 활용
  • 수동으로 클러스터링 팩터 높이기

IOT, 클러스터 테이블 활용

  • IOT란?
  • IOT, 언제 사용할 것인가?
  • Partitioned IOT
  • Overflow 영역
  • Secondary 인덱스
  • 인덱스 클러스터 테이블
  • 해시 클러스터 테이블
  • IOT와 클러스터 테이블을 동시에 적용한 튜닝 사례

인덱스 스캔 효율

  • 비교 연산자 종류와 컬럼 순서에 따른 인덱스 레코드의 군집성
  • 인덱스 선행 컬럼이 등치(=) 조건이 아닐 때 발생하는 비효율
  • BETWEEN 조건을 IN-List로 바꾸었을 때 인덱스 스캔 효율
  • Index Skip Scan을 이용한 비효율 해소
  • 범위검색 조건을 남용할 때 발생하는 비효율
  • 같은 컬럼에 두 개의 범위검색 조건 사용 시 주의 사항
  • Between과 Like 스캔 범위 비교
  • 선분이력의 인덱스 스캔 효율
  • Access Predicate와 Filter Predicate
  • Index Fragmentation

인덱스 설계

  • 가장 중요한 두 가지 선택 기준
  • 인덱스 설계는 공식이 아닌 전략과 선택의 문제
  • 결합 인덱스 컬럼 순서 결정 시, 선택도 이슈
  • 소트 오퍼레이션을 생략하기 위한 컬럼 추가
  • 인덱스 설계도 작성

비트맵 인덱스

  • 비트맵 인덱스 기본 구조
  • 비트맵 인덱스 활용
  • RECORDS_PER_BLOCK


조인 원리와 활용

Nested Loops 조인

  • 기본 메커니즘
  • 힌트를 이용해 NL 조인을 제어하는 방법
  • NL 조인 수행 과정 분석
  • NL 조인의 특징
  • NL 조인 튜닝 실습
  • 테이블 Prefetch
  • 배치 I/O
  • 버퍼 Pinning 효과

소트 머지 조인

  • 기본 메커니즘
  • 소트 머지 조인의 특징
  • First 테이블에 소트 연산을 대체할 인덱스가 있을 때
  • 조인할 First 집합이 이미 정렬돼 있을 때
  • 조인 조건이 등치(=) 조건이 아닐 때

해시 조인

  • 기본 메커니즘
  • 힌트를 이용한 조인 순서 및 Build Input 조정
  • 두 가지 해시 조인 알고리즘
  • Build Input이 Hash Area를 초과할 때 처리 방식
  • Build Input 해시 키 값에 중복이 많을 때 발생하는 비효율
  • 해시 조인 사용 기준

조인 순서의 중요성

Outer 조인

  • Outer NL 조인
  • Outer 소트 머지 조인
  • Outer 해시 조인
  • Full Outer 조인

스칼라 서브쿼리를 이용한 조인

  • 스칼라 서브쿼리
  • 스칼라 서브쿼리의 캐싱 효과
  • 두 개 이상의 값을 리턴하고 싶을 때

조인을 내포한 DML 튜닝

  • 수정 가능 조인 뷰 활용
  • Merge문 활용
  • 다중 테이블 Insert 활용

고급 조인 테크닉

  • 누적 매출 구하기
  • 선분이력 끊기
  • 데이터 복제를 통한 소계 구하기
  • 상호배타적 관계의 조인
  • 최종 출력 건에 대해서만 조인하기
  • 징검다리 테이블 조인을 이용한 튜닝
  • 점이력 조회
  • 선분이력 조인
  • 선분이력 조인 튜닝
  • 조인에 실패한 레코드 읽기


옵티마이저 원리

옵티마이저

  • 옵티마이저란?
  • 규칙기반 옵티마이저
  • 비용기반 옵티마이저
  • 옵티마이저 모드

옵티마이저 행동에 영향을 미치는 요소

  • SQL과 연산자 형태
  • 인덱스, IOT, 클러스터링, 파티셔닝, MV 등 옵티마이징 팩터
  • 제약 설정
  • 옵티마이저 힌트
  • 통계정보
  • 옵티마이저 관련 파라미터
  • DBMS 버전과 종류

옵티마이저의 한계

  • 부족한 옵티마이징 팩터
  • 부정확한 통계
  • 히스토그램의 한계
  • 바인드 변수 사용 시 균등분포 가정
  • 결합 선택도 산정의 어려움
  • 비현실적인 가정
  • 규칙에 의존하는 CBO
  • 하드웨어 성능 특성

통계정보 I

  • 테이블 통계
  • 인덱스 통계
  • 컬럼 통계
  • 시스템 통계

카디널리티

  • 선택도
  • 카디널리티
  • NULL 값을 포함할 때
  • 조건절이 두 개 이상일 때
  • 범위검색 조건일 때
  • cardinality 힌트를 이용한 실행계획 제어

히스토그램

  • 히스토그램 유형
  • 도수분포 히스토그램
  • 높이균형 히스토그램
  • 바인드 변수 사용 시 카디널리티 계산
  • 결합 선택도

비용

  • I/O 비용 모델
  • CPU 비용 모델

통계정보 II

  • 전략적인 통계수집 정책의 중요성
  • DBMS_STATS
  • 컬럼 히스토그램 수집
  • 데이터 샘플링
  • 파티션 테이블 통계 수집
  • 인덱스 통계 수집
  • 캐싱된 커서 Invalidation
  • 자동 통계 수집
  • Statistics Preference


쿼리 변환

쿼리 변환이란?

서브쿼리 Unnesting

  • 서브쿼리의 분류
  • 서브쿼리 Unnesting의 의미
  • 서브쿼리 Unnesting의 이점
  • 서브쿼리 Unnesting 기본 예시
  • Unnesting된 쿼리의 조인 순서 조정
  • 서브쿼리가 M쪽 집합이거나 Nonunique인덱스일 때
  • 필터 오퍼레이션과 세미조인의 캐싱 효과
  • Anti 조인
  • 집계 서브쿼리 제거
  • Pushing 서브쿼리

뷰 Merging

  • 뷰 Merging 이란?
  • 단순 뷰(Simple View) Merging
  • 복합 뷰(Complex View) Merging
  • 비용기반 쿼리 변환의 필요성
  • Merging 되지 않은 뷰의 처리방식

조건절 Pushing

  • 조건절 Pushdown
  • 조건절 Pullup
  • 조인 조건 Pushdown

조건절 이행

조인 제거

OR-Expansion

  • OR-Expansion 기본
  • OR-Expansion 브랜치별 조인 순서 최적화
  • 같은 컬럼에 대한 OR-Expansion
  • nvl/decode 조건식에 대한 OR-Expansion

공통 표현식 제거

Outer 조인을 Inner 조인으로 변환

실체화 뷰 쿼리로 재작성

집합 연산을 조인으로 변환

기타 쿼리 변환

  • 조인 컬럼에 IS NOT NULL 조건 추가
  • 필터 조건 추가
  • 조건절 비교 순서


소트 튜닝

소트 수행 원리

  • 소트 수행 과정
  • 소트 오퍼레이션 측정
  • Sort Area
  • 소트 튜닝 요약

소트를 발생시키는 오퍼레이션

  • Sort Aggregate
  • Sort Order By
  • Sort Group By
  • Sort Unique
  • Sort Join
  • Window Sort

데이터 모델 측면에서의 검토

소트가 발생하지 않도록 SQL 작성

인덱스를 이용한 소트 연산 대체

  • Sort Order By 대체
  • Sort Group By 대체
  • 인덱스가 소트 연산을 대체하지 못하는 경우

Sort Area를 적게 사용하도록 SQL 작성

  • 소트를 완료하고 나서 데이터 가공하기
  • Top-N 쿼리
  • 분석함수에서의 Top-N 쿼리

Sort Area 크기 조정

  • PGA 메모리 관리 방식의 선택
  • 자동 PGA 메모리 관리 방식하에서 크기 결정 공식
  • 수동 PGA 메모리 관리 방식으로 변경 시 주의사항
  • PGA_AGGREGATE_TARGET의 적정 크기
  • Sort Area 할당 및 해제


파티셔닝

테이블 파티셔닝

  • 파티션 기본 구조
  • Range 파티셔닝
  • 해시 파티셔닝
  • 리스트 파티셔닝
  • 결합 파티셔닝
  • 11g에 추가된 파티션 유형

파티션 Pruning

  • 기본 파티션 Pruning
  • 서브쿼리 Pruning
  • 조인 필터 Pruning
  • SQL 조건절 작성 시 주의사항

인덱스 파티셔닝

  • 인덱스 파티션 유형
  • 로컬 피타션 인덱스
  • 비파티션 인덱스
  • 글로벌 파티션 인덱스
  • Prefixed vs. Nonprefixed
  • 파티션 인덱스 구성 예시
  • 글로벌 파티션 인덱스의 효용성
  • 로컬 Nonprefixed 파티션 인덱스의 효용성
  • 액세스 효율을 고려한 인덱스 파티셔닝 선택 기준
  • 인덱스 파티셔닝 제약을 고려한 데이터베이스 설계


병렬 처리

기본 개념

  • Query Coordinator와 병렬 서버 프로세스
  • intra - Operation Parallelism과 Inter - Operation Parallelism
  • 테이블 큐
  • IN-OUT 오퍼레이션
  • 데이터 재분배
  • Granule
  • 병렬 처리 과정에서 발생하는 대기 이벤트

병렬 Order By와 Group By

  • 병렬 Order By
  • 병렬 Group By

병렬 조인

  • 둘 다 같은 기준으로 파티셔닝된 경우 - Full Partition Wise 조인
  • 둘 중 하나만 파티셔닝된 경우 - Partial Partition Wise 조인
  • 둘 다 파티셔닝되지 않은 경우 - 동적 파틱셔닝
  • 둘 다 파티셔닝되지 경우 - Broadcast 방식

PQ_DISTRIBUTE 힌트

  • pq_distribute 힌트의 용도
  • 구문 이해하기
  • 분배방식 지정
  • pq_distribute 힌트를 이용한 튜닝 사례

병렬 처리에 관한 기타 상식

  • Direct Path Read
  • 병렬 DML
  • 병렬 인덱스 스캔
  • 병렬 NL 조인
  • 병렬 쿼리와 스칼라 서브쿼리
  • 병렬 쿼리와 사용자 정의 함수
  • 병렬 쿼리와 ROWNUM
  • 병렬 처리 시 주의사항

레이블 (0)

  • 레이블 없음
댓글 쓰기...

첨부 파일  (1)

첨부 파일 추가하기
  파일 변경됨
JPEG 파일 X9788996246022.jpg 3월 19, 2013 by 민항