오렌지나 디비버 같은 쿼리 툴에서 XPLAN 조회 시 다른 결과가 나오며 실행통계 확인이 불가능한 경우
툴에서 출력 건 수 제한에 걸려 발생하는 경우가 많은데 해결법을 설명함
쿼리 툴에서 XPLAN 조회 시 아래와 같이 다른 원했던 결과가 아닌 다른 SQL의 결과가 나오는 경우가 있다
-- SQL 실행
SELECT /*+ gather_plan_statistics */ * FROM sk.tab4 ;
-- XPLAN 실행
SELECT * FROM TABLE (DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ALLSTATS LAST -ROWS +OUTLINE +PARTITION +PARALLEL')) ;
SQL_ID fnr6th3s0sg5t, child number 0
-------------------------------------
SELECT * FROM TABLE (DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ALLSTATS LAST
-ROWS +OUTLINE +PARTITION +PARALLEL'))
Plan hash value: 3713220770
------------------------------------------------------------
| Id | Operation | Name |
------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | COLLECTION ITERATOR PICKLER FETCH| DISPLAY_CURSOR |
------------------------------------------------------------
아래 그림에 100+ rows 라는 부분이 보이는데
조회 건이 많은데(1000건) 100건만 보여주도록 툴에서 제한이 걸려있는 경우가 그렇다
해결방법
1. SQL 실행
SELECT /*+ gather_plan_statistics */ * FROM sk.tab4 ;
2. 툴마다 다르지만 아래 처럼 모든 데이터 가져오는 옵션이 있을 것이다(예시 툴은 QueryBox)
3. 모든 데이터 가져온 후 DBMS_XPLAN 조회
SELECT * FROM TABLE (DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ALLSTATS LAST -ROWS +OUTLINE +PARTITION +PARALLEL')) ;
SQL_ID f58dx14rujyyk, child number 0
-------------------------------------
SELECT /*+ gather_plan_statistics */ * FROM sk.tab4
Plan hash value: 4132504640
---------------------------------------------------------------------------
| Id | Operation | Name | Starts | A-Rows | A-Time | Buffers |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 73082 |00:00:00.02 | 2133 |
| 1 | TABLE ACCESS FULL| TAB4 | 1 | 73082 |00:00:00.02 | 2133 |
---------------------------------------------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('19.1.0')
DB_VERSION('19.1.0')
OPT_PARAM('_px_adaptive_dist_method' 'off')
OPT_PARAM('_optimizer_strans_adaptive_pruning' 'false')
OPT_PARAM('_optimizer_nlj_hj_adaptive_join' 'false')
ALL_ROWS
OUTLINE_LEAF(@"SEL$1")
FULL(@"SEL$1" "TAB4"@"SEL$1")
END_OUTLINE_DATA
*/
'DBMS > ORACLE' 카테고리의 다른 글
오라클 null 처리 함수(nvl, nvl2, nullif, coalesce) (0) | 2023.09.09 |
---|---|
오라클 숫자(number), 날짜(date) 타입 컬럼 byte size 구하기 (0) | 2023.09.05 |
리스너에 IP/포트 여러개 등록 (0) | 2023.07.26 |
WITH 이용한 TEMP TABLE 사용 테스트 (0) | 2023.07.21 |
table move online 테스트 (0) | 2023.07.06 |
댓글