ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 오라클 성능 고도화1,2 목차정리
    IT/데이터자격증 기록 2018. 10. 8. 14:11


    SQLP자격증을 준비하면서 전문가가이드뿐만아니라 

    오라클성능고도화1,2권도 참조하면서 정리해둔 목차입니다.


    오라클 성능고도화2권이 SQLP자격증을 취득하는데

    더 많이 보았고 관련이 있습니다.


    도움되셨으면 좋겠습니다.






    오라클 성능 고도화1

    1장 오라클 아키텍처
    • 기본 아키텍처
    • DB 버퍼 캐시
    • 버퍼 Lock
    • Redo
    • Undo
    • 문장수준 읽기 일관성
    • Consistent vs. Current 모드 읽기
    • 블록 클린아웃
    • Snapshot too old
    • 대기 이벤트
    • Shared Pool

    2장 트랜잭션과 Lock
    • 트랜잭션 동시성 제어
    • 트랜잭션 수준 읽기 일관성
    • 비관적 vs. 낙관적 동시성 제어
    • 동시성 구현 사례
    • 오라클 Lock

    3장 오라클 성능관리

    4장 라이브러리 캐시 최적화 원리
    • SQL과 옵티마이저
    • SQL 처리과정
    • 라이브러리 캐시 구조
    • 커서 공유
    • 바인드 변수의 중요성
    • 바인드 변수의 부작용과 해법
    • 세션 커서 캐싱
    • 애플리케이션 커서 캐싱
    • Static vs. Dynamic SQL
    • Dynamic SQL 사용 기준
    • Static SQL을 구현하기 위한 기법들

    5장 데이터베이스 Call 최소화 원리
    • Call 통계
    • User Call vs. Recursive Call
    • 데이터베이스 Call이 성능에 미치는 영향
    • Array Processing활용
    • Fetch Call 최소화
    • 페이지 처리의 중요성
    • PL/SQL 함수의 특징과 성능 부하
    • PL/SQL 함수 호출 부하 해소 방안

    6장 I/O 효율화 원리
    • 블록 단위 I/O
    • Memory vs. Disk I/O
    • Single Block vs. Multiblock I/O
    • Prefetch
    • Direct Path I/O
    • RAC캐시 퓨전
    • Result 캐시
    • I/O효율화 원리




    오라클 성능 고도화2

    1장 인덱스 원리와 활용(17 ~ 209)
    • 인덱스 구조
      • (1) 범위 스캔
      • (2) 인덱스 기본 구조
      • (3) 인덱스 탐색
      • (4) ROWID포맷
    • 인덱스 기본 원리
      • (1) 인덱스 사용이 불가능하거나 범위 스캔이 불가능한 경우
      • (2) 인덱스 컬럼의 가공
      • (3) 묵시적 형변환
    • 다양한 인덱스 스캔 방식
      • (1) Index Range Scan
      • (2) Index Full Scan
        • 인덱스를 이용한 소트연산 대체
      • (3) Index Unique Scan
      • (4) Index Skip Scan
        • Index Skip Scan이 작동하기 위한 조건
      • (5) Index Fast Full Scan
        • Index Fast Full Scan을 활용한 튜닝 사례
      • (6) Index Range Scan Descending
      • (7) And-Equal, Index Combine, Index Join
    • 테이블 Random액세스 부하
      • (1)인덱스 rowid에 의한 테이블 액세스
      • (2)인덱스 클러스터링 팩터
        • 버퍼 Pinning에 의한 논리적 I/O감소 원리
        • 손익분기점을 극복하기 위한 기능들
    • 테이블 Random 액세스 최소화 튜닝
      • (1) 인덱스 컬럼 추가
      • (2) PK 인덱스에 컬럼 추가
      • (3) 컬럼 추가에 따른 클러스터링 팩터 변화
        • 인덱스에 컬럼을 추가하면 테이블 Random 액세스 부하를 줄이는 효과가 있지만 인덱스 클러스터링 팩터가 나빠지느 부작용이 생길 수 있다
        • 결론적으로 변별력이 좋지 않은 컬럼 뒤에 변별력이 좋은 다른 컬럼을 추가할 때는 클러스터링 팩터 변화에 주의해야한다
      • (4) 인덱스만 읽고 처리
      • (5) 버퍼 Pinning 효과 활용
      • (6) 수동으로 클러스터링 팩터 높이기
    • IOT, 클러스터 테이블 활용
      • (1) IOT란?
      • (2) IOT 언제 사용할 것인가?
      • (3) Partitioned IOT
      • (4) Overflow 영역
      • (5) Secondary 영역
      • (6) 인덱스 클러스터 테이블
      • (7) 해시 클러스터 테이블
      • (8) IOT와 클러스터 테이블을 동시에 적용한 튜닝 사례
    • 인덱스 스캔 효율(Sequential 액세스 선택도 높이는 방법)
      • (1) 비교 연산자 종류와 컬럼 순서에 따른 인덱스 레코드의 군집성
      • (2) 인덱스 선행 컬럼이 등치 조건이 아닐 때 발생하는 비효율
      • (3) Between 조건을 IN-List로 바꾸었을 때 인덱스 스캔 효율
      • (4) Index Skip Scan을 이용한 비효율 해소
      • (5) 범위 검색 조건을 남용할 때 발생하는 비효율
      • (6) 같은 컬럼에 두 개의 범위검색 조건 사용 시 주의 사항
      • (7) Between과 Like 스캔 범위 비교
        • 정확히 시작지점과 끝지점을 정해주는것이 좋다
      • (8) 선분이력의 인덱스 스캔 효율
        • 너무 어려워서 성능고도화에서 넘어감
      • (9) Access Predicate와 Filter Predicate
      • (10) Index Fragmentation
    • 인덱스 설계
      • (1) 가장 중요한 두 가지 선택 기준
      • (2) 인덱스 설계는 공식이 아닌 전략과 선택의 문제
      • (3) 결합 인덱스 컬럼 순서 결정 시, 선택도 이슈
        • 선택도가 액세스 효율에 영향을 주지 않는 경우
        • 선택도가 높은컬럼을 앞쪽에 두는 것이 유리한 경우
          • 선택도가 높은 컬럼을 선두에 두면 나중에 범위검색 조건이 사용되거나 아예 조건절에서 누락되더라도 Index Skip Scan 또는 IN - List를 활용할 수 있어 유리하다.
        • 선택도가 낮은 컬럼을 앞쪽에 두는 것이 유리한 경우
        • 선택도가 낮은 컬럼을 선택하는 것이 유리한 경우
      • (4) Sort 오퍼레이션을 생략하기 위한 컬럼 추가
    • 비트맵 인덱스

    2장 조인 원리와 활용 (211 ~ 361)
    • NL조인
      • (1) 기본 메커니즘
      • (2) 힌트를 이용해 NL조인을 제어하는 방법
      • (3) NL조인 수행 과정 분석
      • (4) NL 조인의 특징
      • (5) NL 조인 튜닝 실습
      • (6) 테이블 Prefetch
      • (7) 배치 I/O
      • (8) 버퍼 Pinning효과
    • 소트머지 조인
      • (1) 기본 메커니즘
      • (2) 소트 머지 조인의 특징
      • (3) First 테이블에 소트 연산을 대체할 인덱스가 있을 때
      • (4) 조인할 First집합이 이미 정렬돼 있을 때
        • group by가 있더라도 sort oper가 일어날 수 있는데 이는 hash group by로 처리했기 때문, order by절을 명시해 sort group by 로 유도하면 First집합에 대한 Sort Join오퍼레이션은 사라진다.
    • 해시 조인
      • (1) 기본 메커니즘
        • 해시테이블이 PGA영역에 할당되므로 빠르다
      • (2) 힌트를 이용한 조인 순서 및 Build Input 조정
      • (3) 두 가지 해시 조인 알고리즘
        • Leading힌트는 먼저 읽을 테이블을 정하는 힌트고 실제 build input을 정하는 힌트는 swap_join_inputs힌트
      • (4) Build Input이 Hash Area를 초과할 때 처리방식
      • (5) Build Input 해시 키 값에 중복이 많을 때 발생하는 비효율
      • (6) 해시 조인 사용기준
        • 한 쪽 테이블이 Hash Area에 담길 정도로 충분히 작아야함
        • Build Input 해시 키 컬럼에 중복 값이 거의 없어야함

    • 조인 순서의 중요성
      • NL조인의 경우 : 선행테이블 결과건수 작고 후행테이블의 인덱스 잘되어있는게 무조건 효율 좋음
      • 소트머지조인과 해시조인의 경우 : 작은게 유리하지만 소트의 경우 디스크소트가 발생할 정도의 큰 테이블을 포함할 떄는 큰테이블을 드라이빙하는것이 조금 더 빠르다.
    • Outer 조인
      • (1) Outer NL 조인
      • (2) Outer 소트 머지 조인
      • (3) Outer 해시 조인
      • (4) Full Outer 조인
        • Full Outer Join = Left Join + Union All + Anti Join(Not Exists필터)
        • Union ALL을 이용한 Full outer join(내가 업무에 자주쓰는 방식)
    • 스칼라 서브쿼리를 이용한 조인
      • (1) 스칼라 서브쿼리
      • (2) 스칼라 서브쿼리의 캐싱 효과
      • (3) 두 개 이상의 값을 리턴하고싶을 때
    • 조인을 내포한 DML 튜닝
      • (1) 수정 가능 조인 뷰 활용`
      • (2) Merge문 활용
        • Merge Into 활용 1
        • Merge Into 활용 2
      • (3) 다중 테이블 Insert 활용
    • 고급 조인 테크닉
      • (1) 누적 매출 구하기
      • (2) 선분이력 끊기
      • (3) 데이터 복제를 통한 소계구하기
      • (4) 상호배타적 관계의 조인
      • (5) 최종 출력 건에 대해서만 조인하기
      • (6) 징검다리 테이블 조인을 이용한 튜닝
      • (7) 점이력 조회
      • (8) 선분이력 조인
      • (9) 선분이력 조인 튜닝
      • (10) 조인에 실패한 레코드 읽기

    3장 옵티마이저 원리(363 ~ 461)
    • 옵티마이저 
      • (1) 옵티마이저란
      • (2) 규칙기반 옵티마이저
      • (3) 비용기반 옵티마이저
      • (4) 옵티마이저 모드
    • 옵티마이저 행동에 영향을 미치는 요소
      • (1) SQL과 연산자 형태
      • (2) 인덱스, IOT, 클러스터링, 파티셔닝, MV 등 옵티마이징 팩터
      • (3) 제약설정
      • (4) 옵티마이저 힌트
      • (5) 통계정보
      • (6) 옵티마이저 관련 파라미터
      • (7) DBMS버전과 종류
    • 옵티마이저의 한계
      • (1) 부족한 옵티마이징 팩터
      • (2) 부정확한 통계
      • (3) 히스토그램의 한계
      • (4) 바인드 변수 사용 시 균등분포 가정
      • (5) 결합 선택도 산정의 어려움
      • (6) 비현실적인 가정
      • (7) 규칙에 의존하는 CBO
      • (8) 하드웨어 성능 특성
    • 통계정보1
      • (1) 테이블 통계
      • (2) 인덱스 통계
      • (3) 컬럼 통계
      • (4) 시스템통계
    • 카디널리티
      • (1) 선택도
      • (2) 카디널리티
      • (3) NULL값을 포함할 때
      • (4) 조건절이 두 개 이상일 때
      • (5) 범위검색 조건일 때
      • (6) cardinality 힌트를 이용한 실행계획 제어
    • 히스토그램
      • (1) 히스토그램 유형
      • (2) 도수분포 히스토그램
      • (3) 높이균형 히스토그램
      • (4) 바인드 변수 사용 시 카디널리티 계산
      • (5) 결합 선택도
    • 비용
      • (1) I/O 비용 모델
      • (2) CPU 비용 모델
    • 통계정보2
      • (1) 전략적인 통게수집 정책의 중요성
      • (2) DBMS_STATS
      • (3) 컬럼 히스토그램 수집
      • (4) 데이터 샘플링
      • (5) 파티션 테이블 통계 수집
      • (6) 인덱스 통계 수집
      • (7) 캐싱된 커서 Invalidation
      • (8) 자동 통계 수집
      • (9) Statistics Preference

    4장 쿼리변환(463 ~ 571)
    • 쿼리변환이란?
    • 서브쿼리 Unnesting
      • (1) 서브쿼리의 분류
      • (2) 서브쿼리 Unnesting의 의미
      • (3) 서브쿼리 Unnesting의 이점
      • (4) 서브쿼리 Unnesting기본 예시
      • (5) Unnesting된 쿼리의 조인 순서 조정
      • (6) 서브쿼리가 M쪽 집합이거나 Nonunique 인덱스일 때
      • (7) 필터 오퍼레이션과 세미조인의 캐싱효과
      • (8) Anti 조인
      • (9) 집계 서브쿼리 제거
      • (10) Pushing 서브쿼리
    • 뷰 Merging
      • (1) 뷰 Mergingㅇ 이란?
      • (2) 단순 뷰 Merging
      • (3) 복합 뷰 Merging
      • (4) 비용기반 쿼리 변환의 필요성
      • (5) Merging되지 않은 뷰의 처리방식
    • 조건절 Pushing
      • (1) 조건절 Pushdown
      • (2) 조건절 Pullup
      • (3) 조인조건 Pushdown
    • 조건절 이행
    • 조인 제거
    • OR-Expasion
      • (1) OR-Expansion기본
      • (2) OR-Expansion 브랜치별 조인 순서 최적화
      • (3) 같은 컬럼에 대한 OR-Expansion
      • (4) nvl/decode 조건식에 대한 OR-Expansion
    • 공통 표현식 제거
    • Outer 조인으르 Inner조인으로 변환
    • 실체화 뷰 쿼리로 재작성
    • 집합 연산을 조인으로 변환
    • 기타 쿼리 변환
      • (1) 조인 컬럼에 IS NOT NULL조건 추가
      • (2) 필터 조건 추가
      • (3) 조건절 비교 순서

    5장 소트 튜닝(573 ~ 623)
    • 소트 수행 원리
      • (1) 소트 수행 과정
      • (2) 소트 오퍼레이션 측정
      • (3) Sort Area
        • PGA
        • UGA
        • CGA
        • Sort Area 할당 위치
      • (4) 소트 튜닝 요약
    • 소트를 발생시키는 오퍼레이션
      • (1) Sort Aggregate - sum(..), min(..) 실제 소트가 발생하지 않음
      • (2) Sort Order By  
      • (3) Sort Group by - 정렬된 group by결과를 얻고자 한다면 실행계획에 설령'sort group by'라고 표시되더라도 반드시 order by를 명시해야한다.
      • (4) Sort Unique
      • (5) Sort Join
      • (6) Window Sort
    • 데이터 모델 측면에서의 검토
      • 사례1,2,3
    • 소트가 발생하지 않도록 SQL작성
    • 인덱스를 이용한 소트 연산 대체
      • (1) Sort Order By 대체
      • (2) Sort Group By 대체
      • (3) 인덱스가 소트 연산을 대체하지 못하는 경우
        • 전체범위 처리로 쿼리할 시
        • 인덱스 컬럼에 not null제약조건이 없을 때
    • Sort Area를 적게 사용하도록 SQL 작성
      • (1) 소트를 완료하고 나서 데이터 가공하기
      • (2) Top-N 쿼리
      • (3) 분석함수에서의 Top-N 쿼리
    • Sort Area 크기 조정

    6장 파티셔닝
    • 테이블 파티셔닝
    • 파티션 Pruning
    • 인덱스 파티셔닝

    7장 병렬처리

    • 기본개념
    • 병렬 Order by와 Group by
    • 병렬조인
    • PQ_DISTRIBUTE 힌트
    • 병렬 처리에 관한 기타상식




    댓글