Oracle 실행 계획 분석 관련 기초 지식 정리

  • 실행 계획 개념 은 Oacle 에서 의 실행 과정 이나 방문 경로 에 대한 설명 입 니 다.
  • Oracle 실행 계획 보기
  •  a. explain plan for (SQL);
     	select * from table(dbms_xplan.display);
     	--select * from table(dbms_xplan.display()); 
     	--SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));
            	
     b.PL/SQL F5(  F5        ,   pl/sql developer         plan_table         。)        TOAD;
     
     c. sqlplus    autotrace ,       
       :
     SET AUTOTRACE TRACEONLY;  --        ,      
     select * from scott.emp a,scott.emp b where a.empno=b.mgr;
    
  • 실행 계획 의 필드 에서 Id: 실행 순 서 를 설명 하지만 실행 의 우선 순위 가 아 닙 니 다.실행 의 우선 순 위 는 Operation 들 여 쓰기 에 따라 판단 합 니 다. (맨 오른쪽 맨 위 에서 가장 먼저 실행 하 는 원칙 으로 계층 관 계 를 보고 같은 단계 에서 어떤 동작 이 하위 ID 가 없 으 면 가장 먼저 실행 합 니 다. 일반적으로 들 여 쓰기 길이 에 따라 판단 하고 들 여 쓰기 가 가장 큰 것 은 가장 먼저 실행 합 니 다. 만약 에 2 줄 들 여 쓰기 가 같 으 면 위의 것 을 먼저 실행 합 니 다.) Operation: 현재 작업 의 내용 입 니 다.Name: 작업 대상 Rows: 즉 10g 버 전의 이전 Cardinality (기수) 입 니 다. Oracle 은 현재 작업 의 결과 집합 줄 수 를 되 돌려 줍 니 다.Cardinality (기수) / rows: Cardinality 값 은 CBO 가 한 줄 소스 (row source) 에서 되 돌아 올 것 으로 예상 하 는 기록 수 를 나타 낸다. 이 줄 소스 는 표 일 수도 있 고 색인 일 수도 있 으 며 키 조회 일 수도 있다.Oracle 9i 의 실행 계획 에서 Cardinality 는 Card 로 줄 였 다.10g 에서 Card 값 이 rows 로 바 뀌 었 습 니 다.메모: Cardinality 의 값 은 CBO 가 정확 한 실행 계획 을 세 우 는 데 중요 합 니 다. Bytes: 이 절 차 를 실행 한 후에 돌아 오 는 바이트 수 를 표시 합 니 다.Cost (CPU): 이 단계 에 실 행 된 실행 원 가 를 나타 내 며 SQL 이 실 행 된 대 가 를 설명 합 니 다.Time: Oracle 은 현재 작업 시간 을 예측 합 니 다.실행 계획 의 실행 순서 Toad 도구 가 보 는 실행 계획 입 니 다.Toad 에 서 는 실행 순 서 를 잘 보 여 줍 니 다. SQLPLUS 에 서 는 보통 들 여 쓰기 길이 로 판단 하고 들 여 쓰기 가 가장 큰 것 을 가장 먼저 실행 합 니 다. 2 줄 들 여 쓰기 가 같 으 면 위의 것 을 먼저 실행 합 니 다.
  • 실행 계획 의 술어 설명 – access ("A", "EMPNO" = "B", "MGR") – filter ("A", "EMPNO" = "B", "MGR") – filter ("B", "MGR" IS NOT NULL) Access: 이 술어 조건 의 값 은 데이터 의 접근 경로 (전체 표 스 캔 또는 색인) 에 영향 을 줄 것 임 을 나타 낸다.Filter: 서술 어 조건 의 값 은 데이터 의 접근 강도 에 영향 을 주지 않 고 필터 역할 만 합 니 다.주의: 서술 어 에 서 는 access 에 주의 하고 서술 어의 조건 을 고려 하여 사용 하 는 방문 경로 가 정확 한 지 여 부 를 고려 해 야 합 니 다.설명 계획 은 바 인 딩 변수의 데이터 형식 을 고려 하지 않 고 모든 바 인 딩 변 수 를 문자열 형식 으로 가정 합 니 다.서술 어 에 접근 하거나 색인 연산 을 하거나 연결 연산 을 하 는 것 은 해석 계획 에 있어 데이터 형식 이 모두 같다 고 여 겨 진다.그러나 문장 이 진정 으로 실 행 될 때 준비 한 실행 계획 은 데이터 형식 을 고려 해 야 한다.서술 어 는 색인 정의 와 엄 격 히 일치 해 야 합 니 다. 그렇지 않 으 면 색인 을 사용 하지 않 습 니 다.
  • Oacle 접근 데이터 (방문 표) 의 접근 방법
  • 전체 표 스 캔 (FTS, 전체 표 스 캔)
  • rowId 의 테이블 액세스 (rowid lookup) – Rowid 스 캔 은 가장 빠 른 접근 데이터 방식 으로 rowId 의 테이블 액세스 (rowid lookup)
  • 색인 스 캔 INDEX SCAN (INDEX LOOKUP) 색인 유일한 스 캔 (index unique scan) 색인 범위 스 캔 (index range scan) – 색인 부분 스 캔 색인 전체 스 캔 (index full scan) 색인 빠 른 전역 스 캔 (index fast full scan) – 스 캔 색인 에 있 는 모든 블록, Rows 는 정렬 순서에 따라 돌아 오지 않 습 니 다.orderby 가 없 는 경우 색인 점프 스 캔 (index skip scan) 이 자주 발생 합 니 다. - where 조건 열 이 비 색인 인 경우 전도 열 이 자주 발생 합 니 다
  • 표 연결 정렬 병합 연결 (정렬 병합) (SMJ, sort merge join) 내장 순환 연결 (NL, Nested Loops) 해시 연결 (해시 연결) (HJ, Hash Join) 피리 칼 곱 하기 (별 연결)
  • 연산 자 sort - 정렬, 자원 filter - 여과 소모, 예 를 들 어 not in, min 함수 등 은 view - 보 기 를 쉽게 생 성 합 니 다. 대부분 내 연 보기 에서 생 성 됩 니 다 (보기 기본 표 에 깊이 들 어 갈 수 있 습 니 다) partition view - 파 티 션 보기
  • 통계 정보 설명: db block gets: buffer? cache 에서 읽 은 block 의 수량 consistent gets:?buffer? cache 에서 읽 은 undo 데이터 의 block 수량 physical reads:?디스크 에서 읽 는 block 의 수 redo size: DML 에서 생 성 된 redo 의 크기 sorts (memory): 메모리 에서 실행 되 는 정렬 량 sorts (disk): 디스크 에서 실행 되 는 정렬 량 Physical Reads 는 보통 우리 가 가장 관심 을 가 집 니 다. 이 값 이 높다 면 디스크 에서 Buffer Cache 까지 많은 데 이 터 를 구 해 야 한 다 는 것 을 설명 합 니 다.일반적으로 시스템 에 전체 표 스 캔 의 SQL 문 구 를 대량으로 존재 한 다 는 것 을 의미 하 는데 이것 은 데이터 뱅 크 의 성능 에 영향 을 줄 수 있 기 때문에 문 구 를 전체 표 스 캔 하 는 것 을 최대한 피하 고 전체 표 스 캔 의 SQL 문 구 는 관련 색인 을 추가 하여 SQL 문 구 를 최적화 시 켜 해결 하 는 것 을 권장 합 니 다.physical reads 에 대해 db block gets 와 consistent gets 라 는 세 가지 매개 변수 사이 에 환산 공식 이 있 습 니 다. 데이터 버퍼 의 사용 명중률 = 1 - (physical reads / (db block gets + consistent gets).
                 sql:
     SELECT name, value FROM v$sysstat WHERE name IN ('db block gets', 'consistent gets','physical reads');
            Buffer Cache       90%  ,              
    
  • Oracle 의 최적화 기 (Optimizer) 는 모두 3 가지 모델 이 있 습 니 다. RULE (규칙 기반) - RBO (Rule - Based Optimization), Oracle 10g 부터 RBO 는 버 려 졌 고 Hint 방식 으로 사용 할 수 있 습 니 다.COST (원가 기반) – CBO (비용 기반 최적화);CHOOSE (선택 기반);

  • 레 퍼 런 스https://blog.csdn.net/lifetragedy/article/details/51320192 http://dreamoftch.iteye.com/blog/1805899

    좋은 웹페이지 즐겨찾기