Skip to main content

01C

Less than 1 minuteOracle DBcrashcourseoracleoracle-dboracle-sql

01C κ΄€λ ¨


Auto Trace

κ°œμš”

SQL μˆ˜ν–‰ μ‹œ μ‹€μ œ μΌλŸ‰ μΈ‘μ • 및 νŠœλ‹ν•˜λŠ”λ° μœ μš©ν•œ 정보듀을 많이 ν¬ν•¨ν•˜λŠ” 도ꡬ

AutoTrace μ˜΅μ…˜

μ•„λž˜μ™€ 같은 μ˜΅μ…˜μ— 따라 ν•„μš”ν•œ λΆ€λΆ„λ§Œ 좜λ ₯ν•΄ λ³Ό 수 있음

  1. set autotrace on: SQL을 μ‹€ν–‰ν•˜κ³  그결과와 ν•¨κ»˜ μ‹€ν–‰ κ³„νš 및 싀행톡계λ₯Ό 좜λ ₯
  2. set autotrace on explain: SQL을 μ‹€ν–‰ν•˜κ³  그결과와 ν•¨κ»˜ μ‹€ν–‰ κ³„νšμ„ 좜λ ₯
  3. set autotrace on statistics: SQL을 μ‹€ν–‰ν•˜κ³  그결과와 ν•¨κ»˜ 싀행톡계λ₯Ό 좜λ ₯
  4. set autotrace traceonly: SQL을 μ‹€ν–‰ν•˜μ§€λ§Œ κ·Έ κ²°κ³ΌλŠ” 좜λ ₯ν•˜μ§€ μ•Šκ³ , μ‹€ν–‰κ³„νšκ³Ό μ‹€ν–‰ν†΅κ³„λ§Œμ„ 좜λ ₯
  5. set autotrace traceonly explain: SQL을 μ‹€ν–‰ν•˜μ§€μ•Šκ³  μ‹€ν–‰κ³„νšλ§Œμ„ 좜λ ₯
  6. set autotrace traceonly statistics: SQL을 μ‹€ν–‰ν•˜μ§€λ§Œ κ·Έ κ²°κ³ΌλŠ” 좜λ ₯ν•˜μ§€ μ•Šκ³ , μ‹€ν–‰ν†΅κ³„λ§Œμ„ 좜λ ₯

1~3 μˆ˜ν–‰ κ²°κ³Όλ₯Ό 좜λ ₯ ν•΄μ•Ό ν•˜λ―€λ‘œ 쿼리λ₯Ό μ‹€μ œ μˆ˜ν–‰ 4,6 μ‹€ν–‰ 톡계λ₯Ό λ³΄μ—¬μ€˜μ•Ό ν•˜λ―€λ‘œ 쿼리λ₯Ό μ‹€μ œ μˆ˜ν–‰ 5 λ²ˆμ€ μ‹€ν–‰ κ³„νšλ§Œ 좜λ ₯ν•˜λ©΄ λ˜λ―€λ‘œ μ‹€μ œ μˆ˜ν–‰ν•˜μ§€ μ•ŠμŒ

AutoTrace ν•„μš”κΆŒν•œ

  • Autotrace κΈ°λŠ₯을 μ‹€ν–‰κ³„νš 확인 μš©λ„λ‘œ μ‚¬μš©ν•œλ‹€λ©΄ Plan_Table만 생성 λ˜μ–΄ 있으면 κ°€λŠ₯
  • 싀행톡계 κΉŒμ§€ 확인 ν•˜λ €λ©΄ v_$sesstat, v_$statname, v_$mystat 뷰에 λŒ€ν•œ 읽기 κΆŒν•œμ΄ ν•„μš”
  • dba, select_catalog_role λ“±μ˜ 둀을 뢀여받지 μ•Šμ€ μ‚¬μš©μžμ˜ 경우 λ³„λ„μ˜ κΆŒν•œ 섀정이 ν•„μš”
  • plustrace 둀을 μƒμ„±ν•˜κ³  둀을 λΆ€μ—¬ν•˜λŠ” 것이 편리
SQL> @?/sqlplus/admin/plustrace.sql
SQL> grant plustrace to scott;

DBMS_XPLAN

  • DBMS_XPLAN.DISPLAY
  • DBMS_XPLAN.DISPLAY_CURSOR

예제1: μ˜ˆμƒ μ‹€ν–‰κ³„νš 확인

explain plan for
SELECT * FROM EMP WHERE 1=1
AND empno=7900;
SELECT * FROM TABLE(dbms_xplan.display);

예제2: μ˜ˆμƒ μ‹€ν–‰κ³„νš 확인 (sql_id)

SELECT * 
  FROM TABLE(DBMS_XPLAN.DISPLAY(NULL, NULL, 'BASIC'));
SELECT * 
  FROM TABLE(DBMS_XPLAN.DISPLAY(NULL, NULL, 'ADVANCED'));
-- ν•„μˆ˜ν™•μΈ
SHOW PARAMETER statistics_level;
SELECT * 
  FROM v$parameter 
 WHERE 1=1
 AND name LIKE '%statistics_level%';

예제3: μ‹€μ œμ‹€ν–‰κ³„νš 확인

SET SERVEROUTPUT OFF;
ALTER SESSION SET statistics_level = 'ALL';
SELECT /*+ GATHER_PLAN_STATISTICS *//* HNJ */ * FROM EMP WHERE 1=1 AND empno = 7900;

-- sql_id 확인
SELECT SUBSTR(SQL_TEXT, 1, 30) SQL_TEXT, SQL_ID, CHILD_NUMBER
  FROM V$SQL
 WHERE SQL_TEXT LIKE '%HNJ%'
   AND SQL_TEXT NOT LIKE '%V$SQL%';

SELECT * 
  FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('a1n5k59v630kb', 0, 'ALLSTATS LAST'));

μ°Έκ³ 


이찬희 (MarkiiimarK)
Never Stop Learning.