SQL @?/rdbms/admin/utlxplan.sql
select *
from all_synonyms
where synonym_name ='PLAN_TABLE';
explain plan for
select * from emp where empno = 7900;
set linesize 200
@?/rdbms/admin/utlxpls
select * from table(dbms_xplan.display(null,null,'advanced'));
튜너들이 가장 즐겨사용하는 도구 중 하나.
사용법 (SQL DEVELOPER에선 f5로 실행하면됨)
set autotrace on
select * from
Execution Plan : 예상실행계획
Statistics : 실행통계
Auto Trace 옵션
필요권한
실행계획 확인용도만 사용하면 plan table만 생성돼 있으면된다
실행통계까지 확인하려면 v_$sesstat, v_$statname, v_$mystat뷰에 대한 읽기 권한 필요
dba, select_catalog_role등이나, 최소 plustrace 롤부여 필요.
grant plustrace to 계정명;
alter session set sql_trace = true;
select * from t_ord where ord_seq = 517;
alter session set sql_trace =false;
select value
from v$diag_info
where name ='Diag Trace';
select value
from v$diag_info
where name ='Default Trace File';
도스프롬프트나 유닉스 쉘에서 tkprof명령어를 사용할 수 있다.
--sys=no 옵션은 SQL을 파신하는 과저에서 내부적으로 수행되는 SQL문을 제외
tkprof ora11g_ora_22827.trc report.prf sys=no
수행한 결과파일을 텍스트도구에서 확인가능
Call통계 - 트레이스 결과 분석
AutoTrace와 일치하는 항목 매핑
하단 실행계획 통계 각 항목 의미
explain plan for
select * from t_ord where ord_seq = 517;
select plan_table_output
from table(dbms_xplan.display('plan_table', null,'serial'));
'SQL 커서'란 하드파싱 과정을 거쳐 메모리에 적재된 SQL과 파싱트리, 실행계획, 그리고 SQL을 실행하는데 필요한 정보를 담은 SQL Area를 말한다.
오라클은 라이브러리 캐시에 캐싱된 각 커서에 대한 수행통계를 볼수있도록 v$sql뷰를 제공
실행계획은 v$sql_plan뷰에서 확인가능.
v$sql_plan을 조회하려면 SQL에 대한 sql_id와 child_number를 알아야한다
직전에 수행한 sql에대한 sql_id와 child_number조회
select prev_sql_id as sql_id, prev_child_number aschild_no
from v$session
where sid = userenv('sid')
and username is not null
and prev_hash_value <> 0;
이전에 수행한 SQL의 sql_id, child_number조회(SQL TEXT로 검색)
select sql_id, child_number, sql_fulltext, last_active_time
from v$sql
where sql_text like '%t_ord%'
order by last_active_time desc;
sql_id와 child_number로 실행계획조회
select from table(dbms_xplan.display_cursor('sql_id', child_no, 'format'));
select from table(dbms_xplan.display_cursor('sql_id', child_no, 'BASIC ROWS BYTES COST PREDICATE'));
select * from table(dbms_xplan.display_cursor('c1b58wxhtvqw4', 0, 'ALLSTATS LAST'));
항목 설명(괄호안은 SQL 트레이스와 매칭되는 속성)
권한이 필요한 VIEW
grant select on v$session to '계정명';
grant select on vsql to '계정명'; grant select on v_sql_plan to '계정명';
select dbms_sqltune.report_sql_monitor(sql_id=>'sql_id') from dual;
select dbms_sqltune.report_sql_monitor(sql_id=>'sql_id', type=>'html') from dual;
select sql_id, child_number, sql_text, sql_fulltext, parsing_schema_name --1
,loads, invalidations, parse_calls, executions, fetches, rows_processed --2
, cpu_time, elapsed_time --3
, buffer_gets, disk_reads, sorts --4
, first_load_time, last_active_time --5
from v$sql;
select parsing_schema_name "업무"
, count(*) "SQL개수"
,sum(executions) "수행횟수"
,round(avg(buffer_gets/executions)) "논리적I/O"
,round(avg(disk_reads/executions)) "물리적I/O"
,round(avg(rows_processed/executions)) "처리건수"
,round(avg(elapsed_time/executions/1000000),2) "평균소요시간"
,count(case when elapsed_time/executions/1000000 >= 10 then 1 end) "악성SQL"
,round(max(elapsed_time/executions/1000000),2) "최대소요시간"
from v$sql
where parsing_schema_name in ('스키마명')
and last_active_time >= to_date('날짜', 'yyyymmdd')
and executions > 0
group by parsing_schema_name;