프린트 하기

OS환경 : Oracle Linux 6.8 (64bit)

 

DB 환경 : Oracle Database 11.1.0.1

 

방법 : 오라클 11gR1 이상버전에서 보이는 Nested Loop 조인 실행계획(Prefetch, Batch I/O, Vector I/O)

일반 NL 조인에서는 아래와 같은 실행계획이 나타남

1
2
3
4
5
6
7
8
9
---------------------------------------------------------
| Id | Operation                    | Name              |
---------------------------------------------------------
|  0 |SELECT STATEMENT              |                   |
|  1 | NESTED LOOPS                 |                   |
|  2 |  TABLE ACCESS FULL           | DEPARTMENTS       |
|  3 |  TABLE ACCESS BY INDEX ROWID | EMPLOYEES         |
|  4 |    INDEX RANGE SCAN          | EMP_DEPARTMENT_IX |
---------------------------------------------------------

 

 

오라클 9i~11gR1 버전에서는 NL 조인에서 아래와 같은 실행계획이 나타남(새로운 형태)

이는 해당 테이블 엑세스 단계에 Prefetch 기능이 적용되었음을 표현하기 위함임

1
2
3
4
5
6
7
8
9
---------------------------------------------------------
| Id | Operation                    | Name              |
---------------------------------------------------------
|  0 | SELECT STATEMENT             |                   |
|  1 |  TABLE ACCESS BY INDEX ROWID | EMPLOYEES         |
|  2 |   NESTED LOOPS               |                   |
|* 3 |    TABLE ACCESS FULL         | DEPARTMENTS       |
|* 4 |    INDEX RANGE SCAN          | EMP_DEPARTMENT_IX |
---------------------------------------------------------

 

 

오라클 11gR1 이상의 버전에서는 아래와 같이 NL 조인이 두번 들어간 실행계획도 나올수도있음(새로운 형태)

1
2
3
4
5
6
7
8
9
10
----------------------------------------------------------
| Id | Operation                    | Name               |
----------------------------------------------------------
|  0 | SELECT STATEMENT             |                    |
|  1 |  NESTED LOOPS                |                    |
|  2 |   NESTED LOOPS               |                    |
|* 3 |    TABLE ACCESS FULL         | DEPARTMENTS        |
|* 4 |    INDEX RANGE SCAN          | EMP_DEPARTMENT_IX  |
|  5 |   TABLE ACCESS BY INDEX ROWID| EMPLOYEES          |
----------------------------------------------------------

 

 

새로운 포맷의 실행계획이 나타난다고 항상 테이블 Prefetch 기능(배치IO 또는 벡터IO)이 작동하는것은 아님

단지 그 기능이 활성화 되었음을 의미할 뿐임

아래 참조 링크에 본문 실행계획에 대한 상세한 설명이 나와있음

 

 

참조 : 

978496.1, 264532.1

오라클 성능 고도화원리와 해법 1, 2

https://docs.oracle.com/cd/B28359_01/server.111/b28274/optimops.htm#i49732

https://medium.com/garimoo/oracle-vector-i-o-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-nested-loop-%EB%B0%A9%EC%8B%9D-9562102729b4

https://cafe.naver.com/dbian/1694

https://scidb.tistory.com/61

https://cafe.naver.com/dbian/4634