Oracle/튜닝

DISPLAY_CURSOR

pbj1102 2022. 1. 28. 10:14
반응형

DBMS_XPLAN.DISPLAY_CURSOR

 : 10g 부터 지원

 : 9i 에서는 trace 10046 사용해야함

 

해당 패키지를 사용하기 위해서는 일반 DB유저에게 아래와 같은 권한을 부여해야한다. 

GRANT SELECT ON V_$SESSION TO 사용자;

GRANT SELECT ON V_$SQL_PLAN_STATISTICS_ALL TO 사용자;

GRANT SELECT ON V_$SQL TO 사용자;

 

사용법. 

1. 실행 계획을 검토할 문장에 힌트 /*+ gather_plan_statistics */ 삽입 후 실행

2.   select * from table(dbms_xplan.display_cursor(null,null,'TYPICAL ALLSTATS LAST')); 실행

 

예)

SELECT /*+ gather_plan_statistics */ * 
FROM TUNING.ORDERS
WHERE CODE = 10;

 

 

select * from table(dbms_xplan.display_cursor(null,null,'TYPICAL ALLSTATS LAST')); 

 

PLAN_TABLE_OUTPUT
SQL_ID  1xsrwsu9684v1, child number 0
-------------------------------------
SELECT /*+ gather_plan_statistics */ *  FROM TUNING.ORDERS WHERE CODE = 
10
 
Plan hash value: 231671837
 
----------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                           | Name            | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers | Reads  |
----------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                    |                 |      1 |        |       |  8863 (100)|          |   8856 |00:00:00.01 |    8891 |   8776 |
|   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| ORDERS          |      1 |   8911 |   452K|  8863   (1)| 00:00:01 |   8856 |00:00:00.01 |    8891 |   8776 |
|*  2 |   INDEX RANGE SCAN                  | ORDERS_CODE_IDX |      1 |   8911 |       |    31   (0)| 00:00:01 |   8856 |00:00:00.01 |     120 |      0 |
----------------------------------------------------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - access("CODE"=10)

 

PLAN_TABLE_OUTPUT

SQL ID = 힌트를 넣은 SQL 의 ID, Shared Pool 에 저장이 되어 있다면 추후에도 확인이 가능

PLAN HASH VALUE : 실행계획에 종속적인 값

                            SQL ID는 같아도 PLAN HASH VALUE 값은 다를 수 있음, -> 실행계획이 변경 된 것

 

 

 

항목 설명
Id 일련번호
Operation 작업명
Name 사용되는 객체명
Starts
실행 횟수
일반적으로 NESTED LOOP JOIN이나 SORT MERGE JOIN에서 선행 데이터 건수가 해당 값이 됨
E-Rows 실행 단계별 예상 건수
  옵션에 -rows를 사용하면 나타나지 않음
A-Rows 실행 단계별 실제 건수
A-Time
실행 단계별 걸린 시간
누적 값이며 1/100초까지 측정 된다. 누적 값이므로 해당 작업에서 소요된 시간을 구하려면 이전 단계의 값을 차감해주어야 한다
Buffers Logical I/O(BUFFER CACHE에서 읽음)에 의해 읽은 블록 수. 누적 값이므로 해당 작업에서 읽은 블록 수를 구하려면 이전 단계의 값을 차감해주어야 한다
Reads
I/O(DISK에서 읽음)
실행 계획을 비교할 때는 Reads 횟수를 비슷하게 하여 Buffers 항목을 비교하여야 한다. 마찬가지로 누적 값이다.
0Mem PGA를 사용하는 작업(Sort Merge Join, Hash Join 등)이 메모리에서 모두 처리(OPTIMAL PASS) 되었을 때, 예상되는 PGA 사용량
1Mem PGA를 사용하는 작업이 PGA 메모리에서 한번에 처리되지 못하고, 디스크를 한번 사용(ONE PASS)했을 때, 예상되는 PGA 사용량
Used-Mem PGA를 사용하는 작업에서 실제 사용된 PGA 사용량. OPTIMAL PASS이면 (0), ONE PASS이면 (1), MULTI PASS이면 (2)가 표시

 

항목 설명
E-Time 작업 별 예상 실행 시간. 누적값
Cost 작업 별 비용. 비용이 높을수록 성능을 저하시키는 작업일 가능성이 높음
Writes
ONE PASS 이상으로 문장이 실행되어 디스크에 기록하는 블록수
WITH이 MATERIALIZE로 동작하는 경우에도 나타남
Used-Tmp ONE PASS 이상으로 SQL이 실행 될 때 나타남
Pstart
파티션 테이블을 스캔할 때 나타나며, 스캔이 시작되는 파티션 번호가 표시
ADVANCED 또는 PARTITION 옵션을 사용해야 나타남
Pstop 파티션 테이블을 스캔할 때 나타나며, 스캔이 종료되는 파티션 번호가 표시
TQ PARALLEL로 SQL을 실행했을 때 나타남. ADVANCED 옵션을 사용해야 표시
IN-OUT PARALLEL로 SQL을 실행했을 때 나타남. PARALLEL 처리 방식이 표시
Distrib PARALLEL 처리 분배 방식이 표시

 

 

DBMS_XPLAN.DISPLAY_CURSOR 사용법

 

select * from table(dbms_xplan.display_cursor(null,null,'TYPICAL ALLSTATS LAST')); 

 

첫번째 인자 : SQL ID or Null 

                  null : 방금 전에 수행 했던 SQL을 따라감

 

두번째 인자 : PLAN HASH VALUE 값 or Null

                  동일한 SQL ID 에 다른 PLAN HASH VALUE 값을 가지고 있을 경우 확인

세번째 인자 

DBMS_XPLAN.DISPLAY_CURSOR 함수의 세번째 인자에 지정 가능한 항목은 다음과 같음

항목 설명  
BASIC 작업명과 해당 옵션만 표시
TYPICAL 파티션과 PARALLEL 사용과 같은 다양한 정보를 표시. 디폴트
SERIAL TYPICAL과 같지만, PARALLEL 정보는 제외
ALL 표시 가능한 정보는 모두 표시
ADVANCED ALL과 OUTLINE 및 바인드 변수 정보를 표시
ALLSTATS IOSTATS LAST와 동일
MEMSTATS 해시 조인, 정렬 등과 같은 메모리 사용 작업에 대한 정보를 표시
IOSTATS 커서 실행에 대한 I/O 통계 표시
LAST 최근에 실행된 커서에 대한 통계를 표시
OUTLINE OUTLINE 정보와 힌트를 표시
ALIAS 쿼리 블럭명 및 객체의 별칭을 표시
PREDICATE PREDICATE를 표시
PEEKED_BINDS 바인드 변수 값을 표시
PARALLEL 병렬 실행 정보를 표시
PARTITION 파티션 프루닝 정보를 표시
BYTES 계산된 바이트 수를 표시
COST 옵티마이저에 의해 계산된 비용
반응형

'Oracle > 튜닝' 카테고리의 다른 글

B-Tree 인덱스 구조  (0) 2022.02.10
FULL TABLE SCAN  (0) 2022.02.10
실행계획 순서분석  (0) 2022.01.28
CBO, 테이블 통계, 인덱스 통계  (0) 2022.01.28
SQL Tuning  (0) 2022.01.27