--DBMS_XPLAN_예제

 

-- 해당 SQL 찾을 때 사용, SQL_ID 알거나 SQL 일부 내용 알 때 사용
SELECT *  
FROM V$SQL 
WHERE SQL_FULLTEXT LIKE '%SELECT%TB_TEST_1%' 
--WHERE SQL_ID='7abcdefegd' 
; 

 

 

 

-- ALTER SESSION SET CURRENT_SCHEMA 설정시 필요한 SYNONYM 조회 

-- DBA_OBJECTS에서 조회하거나 정확하게 하려면 DBA_SYNONYMS 조회

SELECT * 
FROM DBA_OBJECTS
WHERE OBJECT_NAME='TB_TEST_1';

 

SELECT * 

FROM DBA_SYNONYMS 

WHERE TABLE_NAME='TB_TEST_1';

 

-- SQL에 OWNER 없을 때 주로 사용 

ALTER SESSION SET CURRENT_SCHEMA=USERNAME; 


-- BIND 변수 사용할 때 사용

-- V$BIND_CAPTURE 에 없을 때 DBA_HIST_SQLBIND 에서 조회


SELECT * FROM V$BIND_CAPTURE WHERE SQL_ID='7abcdefegd';
SELECT * 
FROM DBA_HIST_SQLBIND 
WHERE SQL_ID='7abcdefegd' ORDER BY SNAP_ID DESC, INSTANCE_NUMBER, POSITION;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR(SQL_ID,PLAN_HASH_VALUE,NULL,'advanced allstats last'));
--SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('7abcdefegd',1107028900,NULL,'advanced allstats last'));

-- 플랜 확인 필요한 SQL에  /*+ gather_plan_statistics */ 삽입
SELECT /*+ gather_plan_statistics */ *

FROM TB_TEST_1;

-- 직전에 사용한 실제 플랜 확인 가능 

-- 결과값을 메모장이나 별도 화면에서 붙여 넣어서 플랜 확인


SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ADVANCED ALLSTATS LAST'));

 

 

 

 

-- 현재 세션에서 수행했던 실제 플랜 확인 가능 (주로 위에 방법이 편해서 사용)
SELECT PREV_SQL_ID, PREV_CHILD_NUMBER 
FROM V$SESSION
WHERE SID=USERENV('SID') AND USERNAME IS NOT NULL
AND PREV_HASH_VALUE <>0;

SELECT * FROM TABLE(DBMS_XPALN.DISPLAY_CURSOR('7abcdefegd','0','advanced allstats last'));
 

 

-- SQL 문에 /*+ gather_plan_statistics */ 입력

SELECT /*+ gather_plan_statistics */ SYSDATE FROM DUAL;

 

-- 실제 플랜 확인할 SQL 수행한 후에 바로 수행 

SELECT * FROM TABLE(DBMS_XPALN.DISPLAY_CURSOR(NULL,NULL,'ADVANCED ALLSTATS LAST'));

 

 

-- 내가 수행한 SQL 찾을 때 사용

SELECT PREV_SQL_ID, PREV_CHILD_NUMBER FROM V$SESSION WHERE SID= USERENV('SID') AND USERNAME IS NOT NULL AND PREV_HASH_VALUE <>= 0;

-- SQLID 

 

SELECT * FROM TABLE(DBMS_XPLAN.IDSPLAY_CURSOR('SQLID','0','ADVANCED ALLSTATS LAST'));

+ Recent posts