select sal
from emp
where empno = 7788;
:b_id (bind)
1) parse 단계 - > soft parse or hard parse 결정 -> hash (...) function 에 집어넣어서 판단. ==> 8자리의 hash value 나옴
soft parse - 동일한 sql문 : 대문자, 공백, object 들이 일치해야 soft parse
shared pool에 저장된 실행 계획 , p-code를 재사용 - 없으면 hard parse 진행
hard parse -
잘못된 SQL?
과도한 구문분석 시간
과도한 I/O
과도한 CPU 시간
과도한 대기
Active Session History - 현재 사용되는 .. 메모리를 가장 많이 사용하는 것들 보고
ADDM 보고서 - 현재 상태의 통계를 저장 - 시간별로 사진을 찍어서 변화를 비교하여 보고, 문제잇으면 보고 .
SQL Tuning Advisor - 튜닝 계획 , 누락된 인덱스 추가
OLAP -구문분석시간은 중요하지않음.
2) bind
3)execute
4) fetch
애플리케이션 Trace 사용을 위해 환경 설정
잘실행 되는지?
안되면 . (안되는 이유: 프로그램 깔앗던 곳에서 로그인 안했기 떄문에 insufficient 뜸 )
해결방법
alter user system identified by oracle;
-> cmd창 열기
> cd \
> cd labs
>sqlplus system/oracle
>@setup_win.sql
--여기서 또안되면 setup_win.sql 파일에들어가서 수정 -> conn conn / as sysdba 를 지우면 됨.
--다시확인 >@setup_win.sql
test 유저가 생성되었으니 test 로 '새접속' 해보자 (오른쪽위 가 현재 사용중인 데이터베이스이다 )
우선 구조 확인해보자
select * from emp;
select * from dept;
select * from employees;
select count(*) from sales;
select count(*) from customers;
select count(*) from custs;
Trace 사용 해보기전, 확인
TKPROF- trace file 은 binary로 되어있어 읽을수 없지만, 읽을수있게 바꿔준다.
cpu룰 가장많이쓰는 것들 실행을 제일 많이하는 것들 먼저 튜닝하고 싶다하면 조건에 따라 sql문장에서 실행되도록
TRCSESS - 그룹핑을 하여 분석하고 싶을때.. 필요함
SQL Trace
ALTER session set tracefile_identifier ='case1';
trace 파일의 이름: <SID>_ora_PID_case1.trc 이렇게 identify 하기 쉽게 이름을 바꿔줌
세션 활성화 시켜라
alter session set sql_trace=true;
트레이스 세션 비활성화 시켜보자
alter session set sql_trace =false;
복사해서 c:\ labs 에 붙여넣기 해보자
그러고 cmd에서 확인
sql 실행 단계별로 통계 보여줌
논리적읽기 query + current -disk
물리적 읽기 query
11g: v$diag_info
2)10046
alter session set events '10046 trace name context forever, level 8'; --키는 명령어
(level : 1 : 기본
4 : 기본 정보 + bindin 정보
8 : 기본 정보 + waiting 정보
12 : 기본 정보 + binding 정보 + waiting 정보)
alter session set events '10046 trace name context off'; --끄는 명령어
3) trcsess output = min.trc service=EDU*.trc
Optimizer
더좋은 인덱스를 사용하기위해 추론
옵티마이저 - query transformer
옵티마이저 -cost estimator
select *
from emp
where deptno=10;
1)selectivity : 행의 비율 0~1 사이의값 num_distinct 1/10 => 0.1
선택성 = 조건을 충족하는 행 수 / 총 행 수
2)cardinality : 행의 건수 Cardinality = 총 행 수 * 선택성
0.1 * num_rows
3) cost : (i/o time + CPU time ) / SBI time
i/o time = Single Block io time + Multi block io time
실행 계획 생성
실행계획 확인하는 방법(도구)
1)explain plan
plan_table : temporary 테이블임. global temporary table
영구플랜테이블로 저장하고 싶으면 $ORACLE_HOME/rdbms/admin/utlcplan.sql 을 실행해서 plan_table
2)autotrace
3)v$sql_plan
'Oracle' 카테고리의 다른 글
12/21 (0) | 2019.12.21 |
---|---|
Oracle 12/18 (0) | 2019.12.19 |
Oracle 12/15 (0) | 2019.12.15 |