전체 글 137

[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)) -------------------------..