본문 바로가기

04번. IT 힌트얻기

[Tuning] Nested와 Correlated Sub-query의 동시 사용 [사례연구] Nested와 Correlated Sub-query의 동시 사용 本 사례에서는 요구사항의 특성으로 인해 SQL 의 WHERE 절에 IN과 EXISTS를 동시에 사용할 수 밖에 없는 경우, 이를 효과적으로 처리 할 수 있는 방안을 찾고자 한다. - 요구사항 전체 과정(COURSE_CODE)에 대하여 2000년에 신청자가 전혀 없거나 500 명 미만인 과정에 대해 과정코드와 과정명을 조회하고자 합니다. 전제조건 Rule Based Optimzer EC_COURSE : EC_COURSE_PK : COURSE_CODE EC_APPLY : EC_APPLY_PK : COURSE_CODE + YEAR + COURSE_SQ_NO + MEMBER_TYPE + MEMBER_ID Before Tuning SEL.. 더보기
[Tuning] SET AUTOTRACE TRACEONLY EXPLAIN SET AUTOTRACE TRACEONLY EXPLAIN -- 실제 데이터량이 너무 많고 시간이 너무 오래 걸릴 경우 실제 돌려보면 너무나 많은 시간 때문에 실데이터베이스에 부하가 생길 수가 있다. 이럴때 사용하는 것이다. 바로 실행계획만 보여주고 데이터는 보여주지 않는다. 데이터를 확인해보려면 SET AUTOTRACE OFF 더보기
[Tuning] 서브쿼리를 통한 튜닝 기본조건 Rule Based Optimizer EC_COURSE : EC_COURSE_PK : COURSE_CODE EC_APPLY : EC_APPLY_PK : COURSE_CODE + YEAR + COURSE_SQ_NO + MEMBER_TYPE + MEMBER_ID 0. Before Tuning SELECT A.COURSE_CODE, A.COURSE_NAME FROM EC_APPLY B, EC_COURSE A WHERE A.COURSE_CODE = B.COURSE_CODE(+) AND B.YEAR(+) = '2000' GROUP BY A.COURSE_CODE, A.COURSE_NAME HAVING COUNT(B.COURSE_CODE) > 0 call count cpu elapsed disk query .. 더보기
[Tuning]결합인덱스 문제 관련 조인 시 사용된 결합인덱스의 문제 ▶ Optimizer_mode = Rule Based Optimizer ▶ 인덱스 정보 EC_COURSE_CD : EC_COURSE_CD_PK : DIM_COURSE_KEY EC_USER_CNT : EC_USER_CNT_PK : DIM_TIME_KEY + DIM_COURSE_KEY + DIM_GEN_KEY ▶ Before Tuning (Original Source) SELECT A.DIM_COURSE_NAME,B.DIM_TIME_KEY,SUM(B.USER_CNT) FROM EC_COURSE_CD A, EC_USER_CNT B WHERE A.DIM_COURSE_KEY = B.DIM_COURSE_KEY AND A.DIM_BIG_KEY = '02' AND B.DIM_TIME_.. 더보기
[Tuning] 인덱스에 의한 Sort 대체 인덱스에 의한 Sort 대체 ▶ Index 정보 - 인덱스정보 EC_COURSE : EC_COURSE_PK : COURSE_CODE EC_COURSE_SQ : EC_COURSE_SQ_PK : COURSE_CODE + YEAR + COURSE_SQ_NO EC_COURSE_SQ_IDX_01 : YEAR (Non Unique) EC_APPLY : EC_APPLY_PK : COURSE_CODE + YEAR + COURSE_SQ_NO + MEMBER_TYPE + MEMBER_ID EC_APPLY_COMPANY_IDX : COMPANY_NO (Non Unique) ++ 테이블 중 EC_COURSE_SQ 테이블만 통계정보 존재 ▶ Before Tuning SELECT B.COURSE_CODE, C.COURSE_NAM.. 더보기
[Tuning] perfect_study_01 Database 기동 작업 ================== /DBA1/dba00> sqlplus "/as sysdba" SQL> startup ORACLE instance started. Total System Global Area 51454112 bytes Fixed Size 73888 bytes Variable Size 33538048 bytes Database Buffers 16777216 bytes Redo Buffers 1064960 bytes Database mounted. Database opened. SQL> exit Optimizer ========= - SQL에 대해 해석(parse)을 하고, 실행계획을 수립한 후 이를 통해 데이터를 처리하는 프로세스를 일컫는다. --------- (.. 더보기
[Tuning] Nested Loop Join (튜닝포인트) 1. 조인 순서의 최적화 2. 연결고리(조인조건)에 대한 인덱스 생성 및 사용 3. 인덱스를 잘 활용해야 한다. -- Suppressing 의 적재적소 사용 -- 인덱스 매칭율을 고려한 인덱스 확인 -- 연결고리로 읽는 것을 확인 * JOIN 순서 제어를 위한 방법 (4가지) 1) 힌트 (*+ ORDERED *.) 2) Supprssing 3) 뷰 활용 4) FROM 절의 테이블 순서 변경 (단, RBO일 경우만 일부 가능하다.) 더보기
[Tuning] optimizer_mode 세션 별로 CBO, RBO에 대한 실행계획을 확인 하기 위해서는 실제로 ANALYZE TABLE ___ COMPUTE STATISTICS; 를 사용하는 것이 아니라 optimizer_mode를 셋팅을 한다. SQL> show parameter optimizer_mode NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ optimizer_mode string CHOOSE SQL> SQL> SQL> ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS; Session altered. SQL> SHOW PARAMETER OPTIMIZER_MODE NAME TYP.. 더보기
[Tuning] 인덱스 매칭률 인덱스 매칭률 특정 테이블에 대해서 SQL 상의 주어진 조건으로 인해 사용될 수 있는 인덱스가 두 개 이상이라고 할 때 Optimizer는 조건에 가장 적절한 인덱스를 선택해서 사용해야 한다. 이와 같이 주어진 조건에 가장 적절한 인덱스를 선택해서 사용하고자 할 때 이용하는 원리이자 기준을 "인덱스 매칭률"이라고 한다. 인덱스 매칭률 = WHERE 절에서 1st컬럼 부터 연속된 컬럼에 대해 상수화 된 조건에 '='을 사용한 컬럼의 개수 / 인덱스를 구성하는 컬럼의 총 개수 Optimizer의 인덱스 선택 시 판단 절차 1) 주어진 조건에 대한 각 인덱스 별로 매칭률을 계산하여 매칭률이 높은 것을 우선적으로 선택 2) 인덱스 별 매칭률이 같을 경우 인덱스를 구성하는 컬럼의 개수가 많은 것을 우선적으로 선택.. 더보기
[Tuning] CBO vs RBO 사례 1. SQL분석 시 차이 [개요] Optimizer mode가 Rule base일 때와 Cost base일 때 SQL을 해석함에 있어 어떤 차이가 있는지를 구체적으로 알아 보고자 합니다. - 인덱스정보 EC_TASK : EC_TASK_PK : COURSE_CODE + TASK_NO EC_TASK_TERM : EC_TASK_TERM_PK : COURSE_CODE + YEAR + COURSE_SQ_NO + TASK_NO EC_TASK_TERM : EC_TASK_TERM_IDX00 : COURSE_CODE + TASK_NO + YEAR + COURSE_SQ_NO SQL#01_01 SELECT * FROM EC_TASK A, EC_TASK_TERM B WHERE A.COURSE_CODE = B.COURSE.. 더보기