레이블이 predicate란인 게시물을 표시합니다. 모든 게시물 표시
레이블이 predicate란인 게시물을 표시합니다. 모든 게시물 표시

2021년 12월 22일 수요일

오라클 SQL실행계획이란? 실행계획해석, 실행계획 predicate란, 통계정보 해석 방법, 자바학원 오라클교육동영상, 오라클학원교육, 자바학원, 오라클학원

 








오라클 SQL실행계획이란? 실행계획해석, 실행계획 predicate란, 통계정보 해석 방법



SQL 실행계획



실행계획이란?

실행계획 해석 방법

실행계획 predicate란?

통계정보 해석 방법





오라클에서 실행계획(Execution Plan)은 SQL 실행시 최적화 단계에서 옵티마이저(Optimizer)가 만들어 내는 SQL실행을 위한 방법, 단계 순서를 기술한 것 으로 다음과 같은 내용들이 포함됩니다.


SELECT 쿼리가 실행딜 때 테이블 및 인덱스는 어떤식으로 접근하는지
조인은 해시조인, 머지조인, 중첩루프조인중 어떤 조인을 사용하고 테이블 조인순서는 어떤 테이블을 먼저 할 것인지
어떤 SQL 연산을 이용하는지(필터, 정렬, 집계 등을 위한 연산)
오라클 옵티마이저가 실행계획의 각 단계마다 예상되는 비용 사항을 표시하는 최적화 정보



[실행계획의 해석]


실행계획 해석을 위해서는 Row Source Tree 또는 Row Source Level을 이용하여 해석하는데 아래 예를 보겠습니다. 

“RESEARCH” 부서원등을 대상으로 사원테이블과 부서테이블을 조인하여 사원명, 급여, 부서명을 추출하는 쿼리 입니다.사원테이블에는 부서번호컬럼만 있어서 부서명을 추출하기 위해 부서테이블과 조인을 합니다.


SLQ*Plus에서 set autotrace on을 수행하여 SQL의 실행결과, 실행계획, 통계정보를 같이 보이도록 했습니다.


실행계획을 해석해보면 


① 오른쪽으로 가장 많이 들여쓰기가 되어 있는 부분부터 해석을 하는데 레벨이 같은 경우 위쪽에 있는것을 먼저 해석 합니다.  ID 3번 단계 EMP 테이블 전체 FULL SCAN하면서 사원데이터를 한건 읽습니다.


② DEPT 테이블에서 PK 인덱스(deptno 컬럼 인덱스)를 스캔하여 위에서 읽은 사원의 부서번호가 있는지 확인합니다. 조인조건 emp.deptno = dept.deptno를 확인하는데 조건에 맞지않는 데이터는 버립니다.


③ 만약 위 조인조건을 만족한다면 Id 5번 TABLE ACCESS BY INDEX ROWID| DEPT 을 수행하면서 dept.dname = 'RESEARCH' 조건을 칠터링 합니다. 앞에서 부서테이블의 PK인덱스를 이용하여 추출한 사원의 부서번호가 부서테이블에 있는지 확인 했는데 있으면 인덱스 영역의 ROWID(부서 원본데이터의 물리적 주소)를 이용하여 원본 부사테이블 데이터에 접근하여 부서명이 “RESEARCH”인지 확인하고 맞으면 보관, 아니면 버립니다.


NESTED LOOPS 가 2개 있다는것 확인 하세요.


④ 다시 1번으로 가서 다음 사원 데이터를 읽습니다. 그리고 2, 3 과정을 반복하는데, 부서테이블에 그 사원의 부서번호가 있는지, 있다면 “RESEARCH” 부서인지를 확인하는 것 입니다. 이과정을 사원14명을 반복해서 확인 합니다.


이번에는 위 실행계획의 하단에 나오는 Predicate에 대해 알아보겠습니다.


인덱스 접근시의 컬럼 액세스 정보, 조인 정보, filter 정보를 각 Opreation 단위로 나타낸 것 입니다.

access predicate : 데이터 블록을 어떤 방식으로 Access해서 읽었는지를 나타내는 것. 
filter predicate : 데이터 블록을 읽고 나서 데이터를 어떻게 필터링 했는지를 나타낸 것.


위 쿼리는 중첩루프 조인을 이용하여 데이터를 추출했는데 중첩루프인 경우 먼저 드라이빙 테이블을 읽은 후 실제 조인은 후행 테이블을 읽을 때 발생하므로 access predicate가 Id 4번, filter predicate가 Id 5번에서 발생 합니다.


 4 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")

 5 - filter("DEPT"."DNAME"='RESEARCH')


predicate의 정보는 데이터 추출시 중요한 정보가 되는데,  만약 인덱스가 여러 개의 컬럼으로 구성된 복합 인덱스라면 인덱스 스캔시 인덱스 영역에서 칼럼이 모두 Access되었는지 등을 predicate로 확인할 수 있습니다. A칼럼 + B칼럼으로 인덱스가 구성된 경우 predicate로 확인했을 때 A칼럼만 인덱스 스캔시 사용되었고 B칼럼은 filter predicate에 나타난다면 쿼리 성능에 문제가 있을 수 있기 때문 입니다.


마지막으로 통계정보(Statistics)에 대해 알아보겠습니다.


    //재귀호출의 횟수, SQL 파싱과 최적화 과정등에서 발생하게 되는 Data Dictionary 조회,
        // 테이블의 존재나 권한체크(사용자가 테이블에 대해 SELECT 권한 등이 있는지)    
        //하드파싱 시증가. Recursive Call을 최소화 하기 위해서는, 바인드 변수를 사용하여 
        //하드파싱 발생 자체를 줄이는 것이 효과적이다       
        170  recursive calls    
        //현재의 블록이 요구된 횟수
        //DML or SELECT FOR UPDATE등에 의한 Current Mode로 읽힌 블록 수 
         0  db block gets          
        //한 블록에 대해 요구된 consistent read 횟수
        //SELECT했을 때 읽기 일관성 모드로 읽힌 블록 수(Consistent Mode)
        324  consistent gets              
        //디스크로부터 읽어들인 데이터 블록의 총 개수
        0  physical reads 
        // 리두로그가 만들어진 크기(SIZE)             
        0  redo size         
        // Client에 보내진 바이트수
        845  bytes sent via SQL*Net to client       
        // Client로부터 받은 바이트 수
        483  bytes received via SQL*Net from client             
        //클라이언트에 송/수신된 Net메시지 합계 수
        //SQL*Pluss라면 Set Arraysize 설정에 따라 달라진다.
        2  SQL*Net roundtrips to/from client
       // 메모리에서 일어난 소트의 수
       18  sorts (memory)      
       // 디스트에서 일어난 소트의 수    
       0  sorts (disk)     
        //연산을 하는 동안 처리한 ROW의 수       
       5  rows processed 



        



#오라클, #실행계획, #실행계획해석, #실행계획이란, #predicate란, #통계정보, #오라클교육, #오라클학원, #오라클동영상, #ORACLE교육, #ORACLE학원, #ORACLE동영상, 오라클, 실행계획, 실행계획해석, 실행계획이란, predicate란, 통계정보, 오라클교육, 오라클학원, 오라클동영상, ORACLE교육, ORACLE학원, ORACLE동영상, 




 

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...