20100607월 교육
1) PC이름 : \\M1102ins\업무에 바로 쓰는 SQL튜닝
IP: 70.12.200.154
unix Account : dba01 ~ [dba06]
pass word 영숫자 6자리 : dba1234
> sqlplus sys
Enter password : as sysdba
SQL> startup
SQL> connect ecampus/ecampus
SQL> show user
USER is "ECAMPUS"
환경
! (잠시 나가는것 = host )
exit (되돌아오는것)
dba06@sun04-zone:/DBA2/dba06> echo $ORACLE_HOME
/oracle/app/product/9.2.0
dba06@sun04-zone:/DBA2/dba06> cd $ORACLE_HOME
dba06@sun04-zone:/oracle/app/product/9.2.0> cd rdbms
dba06@sun04-zone:/oracle/app/product/9.2.0/rdbms> cd admin
dba06@sun04-zone:/oracle/app/product/9.2.0/rdbms/admin> vi utlxplan.sql
( create table PLAN_TABLE 정의한 것이다 )
9쪽 참고
실행
SQL> @$ORACLE_HOME/rdbms/admin/utlxplan.sql
--
dba06@sun04-zone:/oracle/app/product/9.2.0/sqlplus/admin>
===============================
환경 (업무상)
Real server
Test Server
C1-1.2) set autotrace
소용시간 확인
set timing on ( Elapsed time )
#1) EXPLAIN PLAN
#2) Set AUTOTRACE
SET AUTOTRACE ON
SET AUTOTRACE ON EXPLAIN
SET AUTOTRACE TRACEONLY
SET AUTOTRACE TRACEONLY EXPLAIN
SET AUTOTRACE OFF
SET TIMING ON -- 소요시간을 확인할수 있다)
role 존재해야 함 (plustrce.sql 로 생성)
#3)
SET AUTOTRACE ON EXPLAIN
--
SET AUTOTRACE OFF
SHOW PARAMETER OPTIMIZER_MODE
(35wHR)
define _editor=vi
(SQL>에서 edit를 처리하는 방법)
select empno,ename,job from emp where empno > 0 order by empno desc ;
SET AUTOTRACE OFF
show parameter db_file_multiblock_read_count
select * from emp where empno = 7900 or empno = 7788
{
VARIABLE A NUMBER ;
SELECT COUNT(*) FROM EC_COURSE_SQ WHERE :A = 1 AND COURSE_CODE = 712 AND YEAR = '2000'
;
}
{
SELECT DISTINCT EMPNO FROM EMP
SELECT EMPNO FROM EMP GROUP BY EMPNO
}
{?
SELECT LPAD(' ',4*(LEVEL -1)) || NAME FROM EMP WHERE START WITH ENAME ='KING'
CONNECT BY PRIOR EMPNO = MRG ;
CREATE SEQUENCE T_SEQ
START WITH 1
INCREMENT BY 1 ;
?
SELECT T_SEQ,ENAME,JOB FROM EMP WHERE DEPTNO = 30 ;
}
원격지 작업 (DRIVING SITE)
292쪽
#4) TKPROF UTILITY (16쪽) -19쪽 표 참고
{
TRACE FILE 생성 지정
먼저 선언문
SQL> ALTER SESSION SET SQL_TRACE = TRUE ;
( SHOW PARAMETER SQL_TRACE )
SQL> ALTER SESSION SET TIMED_STATISTICS = TRUE ;
( SHOW PARAMETER TIMED_STATISTICS )
SQL_TRACE(TRUE/FALSE)
TIMED_STATISTICS(TRUE/FALSE)
USER_DUMP_DEST(디렉토리지정)
MAX_DUMP_FILE_SIZE
}
디렉토리 선언
initSID.ora 내에서 user_dump_dest =
SQL> !
dba06@sun04-zone:/DBA2/dba06> cd admin/dba06/udump
show parameter user_dump_dest ;
alter system set user_dump_dest = '/DBA3/dba06/tune
shutdown abort (= shutdown immediate)
dba06@sun04-zone:/DBA2/dba06/admin/dba06/udump> tkprof dba06_ora_18615.trc t.txt
insert=i.sql record=r.sql sys=no aggregate=no explain=ecampus/ecampus
============
alter session set optimizer_mode =rule;
pseudo columns : 시스템에서 컬럼을 정의 하지 않은것을 이요하는것
-sysdate
-rowid
-rownum
-user
-level 등등이 활용한다
#5 OPTIMIZER
-SQL 해석(PARSE) 하고 처리하기 위한 방법 수립하는 프로세스
-종류( RBO-규칙 .CBO-실용성)
-RBO .RANK RULE (24Page) EX05.TXT
1) ROWID 한행
4) UNIQUE, Primary Key
8) 결합 컬럼(Composite) index
9) 단일컬럼(Single) index
10) index 유한영역 검색
11) index 무한영역 검색
15) INDEX 없이 전 테이블 스캔 (FTS : Full Table Scan)
SET AUTOTRACE ON
SET AUTOTRACE ON EXPLAIN
SELECT * FROM EMP WHERE DEPTNO BETWEEN 10 AND 20
AND JOB LIKE 'SA%' ;
-CBO : 최적의 상태로 유지하기 이해 통계정보 생성하는 Analyze Object작업을 정기적으로 해줘야 한다
(참고 ex07) oracle10g 자동으로 된다
* Analyze Object 정보(인덱스,컬럼, 클러스터)
desc user_tables 정보에 있다
- 테이블 ( Row, Block 등을 가지고 있다) : 참고 LASR_ALNALYZE ( 최종 날자가 갱신된것 중요)
* 실행 (35쪽)
- ANALYZE [ TABLE / ONDEX / CLUSTER ] OBJECT_NAME
[ COMPUTE / ESTIMATE / DELETE ] STATISTICS ;
( COMPUTE 조건은 전체 테이블 가지고 하니 좋지만 오랜시간이 걸린다 : 야간에이용
ESTIMATE 조건은 표본추출 퍼센트,ROW수 시간은 빠르지만 오차가 생기지
DELETE 정보 삭제 하는것
)
첫댓글 본부(원무, 김민영) / 의정무 (원일) / 부천(이상민)