DATABASE(oracleDB 11g) 100

[Performance Tuning]Performance Tuning

Performance Tuning 실행계획 확인하는 방법 explain plan : plan_table에 저장 SCOTT@orcl2> explain plan set statement_id = 'test01' into plan_table for select * from emp where job = 'CLERK'; -- plan 테이블을 식별하기 위한 표시 test01 -- plan_table은 temporary table로 만들어져 있다 SCOTT@orcl2> select * from table(dbms_xplan.display); -- temporary table을 보기 좋게 보여준다. SCOTT@orcl2> @$ORACLE_HOME/rdbms/admin/utlxplan -- SCOTT 유저에 plan_..

[SQL Tuning]바인드 변수의 사용

바인드 변수의 사용 바인드 변수의 기본적인 사용 USER01@orcl2> variable job_id varchar2(10) USER01@orcl2> exec :job_id :='SA_REP'; PL/SQL procedure successfully completed. USER01@orcl2 select count(*) from employees where job_id = :job_id; COUNT(*) ---------- 30 USER01@orcl2> exec :job_id := 'AD_VP'; USER01@orcl2> select count(*) from employees where job_id = :job_id; COUNT(*) ---------- 2 USER01@orcl2> col sql_text ..

[SQL Tuning]옵티마이저 통계

옵티마이저 통계 옵티마이저 통계 옵티마이저가 참고하는 통계 시스템 통계 (I/O 속도, CPU 속도 등 하드웨어적 성능) 시스템 통계는 sys가 소유하고 있다.(sys.aux_stats$) 인스턴스가 기동될때 기본적인 통계 정보가 수집이 된다. 객체통계 테이블 통계 컬럼 통계 인덱스 통계 user_indexes(blevel, lead_blocks, clustering_factor) 수집방법 자동 : auto task (22:00 - 04:00) 수동 : DBMS_STAT Dynamic Sampling : 옵티마이저가 스스로 진행 클러스터링 팩터(cf) 클러스터링 이라는 것은 군집되어있다는 말. 인덱스 컬럼의 순서대로 데이터블럭에 행이 정렬된 정도 cf 가 blocks에 수렴하면 가장 좋다. cf 가 nu..

[SQL Tuning]Partitioned table

Partitioned table partition이란? 테이블, 인덱스를 파티션 단위로 나누어서 저장하는 것 하나의 테이블이 별도의 세그먼트로 저장되고 여러 테이블스페이스에 저장될 수 있다. 장점 관리상 장점 성능상 장점 파티션 프루닝(pruning) : 불필요한 파티션을 액세스 하지 않고 필요한 파티션만 액세스 xplan으로 확인 가능 파티션 와이즈 조인 : emp 파티션, dept 파티션 둘다 파티션 테이블이라면 둘을 조인할때 해당 파티션끼리만 조인을 할 수 있다. 병렬처리를 할 수 있다. 파티션의 종류 range 파티셔닝 파티션 키값의 범위(RANGE)에 따라서 각각의 파티션에 데이터를 저장하는 방식 데이터를 골고루 분포하게 (well distribute 하게) 집어 넣는다. ============..

[SQL Tuning]Subquery operation(서브쿼리 오퍼레이션)

Subquery operation Subquery SQL문 안에 select 문이 있는 쿼리 Nested Subquery where 절에 사용 Inline View From 절에 사용 Scalar Subquery "하나"의 컬럼 값 "하나"를 리턴 Nested Subquery Single Row Subquery Multiple Row Subquery Multiple Column Subquery USER01@orcl2> select last_name, salary, department_id from employees where salary in (select min(salary) from employees group by department_id); -- dept는 중복되서 나온다. -- mulitiple..

[SQL Tuning]Join operation(조인 오퍼레이션)

Join operation Nested Loops Join 선행 테이블 (Outer Table) 결정 후 후행 테이블(Inner Table)에 반복적인 접근 후행 테이블의 조인 컬럼에 인덱스 필요 소량의 데이터를 조인 시 사용 부분 범위 (first_rows) 처리에 최적화 많은 양의 데이터 조인 시 Random Access 증가 8i Driving outer 이것을 선택하는게 가장 중요하다 작은 table 우선으로 선택 1건만 찾아낼 수 있다면 걔가 무조건 outer 추가조건 Drived inner 인덱스가 존재하면 좋다. optiomizer_mode 가 all_rows면 이 방법을 잘 사용하지 않으므로, first_rows로 둔다. 가장 일반적인 실행 계획 Nested Loop Outer table ..

[SQL Tuning]인덱스(Index)의 기초

인덱스(Index)의 기초 인덱스 양방향 링크가 되어있으므로, range scan이 가능 B*트리 인덱스 가장 기본적인 인덱스 비트맵 인덱스 DML이 덜 일어나도록 하는 DW(data warehouse) and와 or이 많은 경우 cardinality를 줄여야 할 경우 USER01@orcl2> select count(*) from custs; COUNT(*) ---------- 55500 USER01@orcl2> select count(*) from sales; COUNT(*) ---------- 918843 USER@orcl2> select count(distinct(cust_city)) from custs; COUNT(DISTINCT(CUST_CITY)) -------------------------..

[SQL Tuning]인덱스를 사용하지 못하는 사례 6가지와 해결책

인덱스를 사용하지 못하는 사례 6가지와 해결책 인덱스를 사용하지 못하는 사례 6가지와 해결책 FULL TABLE SCAN NO INDEX 인덱스가 있지만 범위가 넓어서 FTS이 더 효율적일때 인덱스를 쓰면 더 효율적일듯.. BUT 사용 못하는 경우 조건식의 부재 --> 문장 수정 (표준) != IS NULL 변형 인덱스 사용 불가능 사례 1. 잘못 사용된 조건식 또는 조건식의 부재 SCOTT@orcl2> select ename, rowid from emp where ename = 'SCOTT'; ENAME ROWID ---------- ------------------ SCOTT AAAR3dAAEAAAACXAAH SCOTT@orcl2> select * from emp where rowid = 'AAAR3..

[SQL Tuning]옵티마이저 연산자

옵티마이저 연산자 Optimizer가 선택하는 Access PATH Table Access 전체 테이블 읽기(Full Table Scan : 실행 계획상에서는 'Table Access Full(TAF)' 로 출력) SQL> select * from emp; SQL> select /*+ FULL(emp) */ * from emp where deptno=10; HINT : Optimizer에게 이 경로를 이용하라고 지시 USER01@orcl2> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ----------..

[SQL Tuning]실행계획

실행계획 실행계획 확인 방법(도구) explain plan(파스만) plann_table에 저장(temporary table, $ORACLE_HOME/rebms/admin/utlxplan(영구테이블)) dbms_xplan.display from table(dbms_xplan.display) ==================================================================================================== vi setup.sql SET echo on CONN / AS SYSDBA DROP USER user01 CASCADE ; DROP TABLESPACE userdata INCLUDING CONTENTS AND DATAFILES ; CREAT..