본문 바로가기

실행계획

[Tuning] 분석함수의 활용 (셀프조인의 해결) Analytic Functions 의 활용 -> 셀프 조인의 해결 #1 Original Source -- View Merge 현상 발생 SELECT C.BRNCOD, C.CMPID, C.STSDAT, C.STS, C.AMT FROM CUSTOMER C, /* 최종상태*/ (SELECT B.BRNCOD, B.CMPID, B.STSDAT, MAX(B.STS) MAX_STS FROM CUSTOMER B, /* 최종날짜 */ (SELECT BRNCOD, CMPID, MAX(STSDAT) MAX_DAT FROM CUSTOMER WHERE STSDAT 0 call count cpu elapsed disk query current rows ------- ------ -------- ---------- --------.. 더보기
[Tuning] Scalar 서브쿼리 활용 [개요] Sub-query 는 조인과 더불어 자주 사용되고 있습니다. 특히, 아우터 조인과 똑같은 결과를 만들어 내기 위한 방안으로 1) PL/SQL을 이용한 사용자 정의 함수(User defined function)의 사용 2) Scalar Sub-query의 사용 등을 고려할 수 있습니다. 이번 예제에서 는 이러한 두 가지 방안의 내부적 수행원리를 비교해 보도록 하겠습니다. 기본정보 Rule Based Optimizer 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) 0. Before Tun.. 더보기
[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_.. 더보기
[실행계획] Exercise_04 HASH JOIN 다르게 동시에 수행되는 특성과 스캔 방식이 아니라 연산에 의한 데이터 연결이라는 차이에 의해서 발생하는 것입니다. 적은 범위의 데이터라면 연결 고리와 선행 조건의 선택만 효율적으로 이루어진다면 NESTED LOOP JOIN이 유리하지만 반대의 경우나 데이터 양이 상당히 많은 경우 정렬 영역 사용에 문제가 있는 SORT MERGE JOIN 보다 HASH JOIN이 유리합니다. 일반적인 경우 OPTIMIZER 모두가 CHOOSE일 경우, NESTED LOOP JOIN인 실행계획의 가격이 불리할 때는 거의 100% HASH JOIND이 나오게 됩니다. HASH JOIN 이 관계형 데이터베이스에서 비용이 가장 많은 JOIN 인 반면 정확히 적재 적소에 사용한다면 다른 어떤 JOIN 보다 성능이.. 더보기
[실행계획] Exercise_03 ▶ 실행계획 설명 1-1. DUAL 테이블을 접근 -> 조건에 ROWNUM을 이용한다. 1-2. WORK_INF 테이블에 FULL SCAN으로 접근한다. 2. 1-1, 1-2의 결과 집합을 CARTESIAN JOIN을 통해서 연결해준다. 3. ORDER BY 순으로 SORTING을 해주고보여준다. ▶ 추가 설명 (1) FAST DUAL - Oracle 9i 에서 사용되는 DUAL의 FULL TABLE SCAN 대신 10g에서는 FAST DUAL optimization plan을 사용한다. Use DUAL Freely 아래와 같은 명령을 실제로 사용하는 개발자(또는 DBA)의 수가 얼마나 될 것이라 생각하십니까? select USER into from DUAL 아마 거의 모든 이들이 사용하고 있을 것입니다.. 더보기
[실행계획] Exercise_02 ▶ 계획 설명 1. WORK_INF 테이블을 Full Scan한다. - 이때 300row와 11K 만큼 Access를 하게 된다. 2. Access한 데이터를 group by를 한다. --> 위에서 HASH (GROUP BY)를 진행한다. version 10.2 에서 부터 GROUP BY가 SORT GROUP BY에서 HASH GROUP BY로 바뀌었다고 한다. 그래서 GROUP BY 한 결과가 기존에서는 SORT되어 보여주었지만 이 버전부터는 SORT되지 않은 채로 보여준다. 그래서 SORT된 결과 값을 보기위해서는 ORDER BY 절에 GROUP BY절에 설정한 것들을 추가해야 한다. 그리고 이렇게 되었을 경우에는 HASH GROUP BY가 아닌 SORT GROUP BY가 된다. ▶ 추가 설명 (Ha.. 더보기
[Notice]실행계획 카테고리 생성 실행계획에 관련된 카테고리를 생성을 했다. 최근에 Homo Convergence Story를 바탕으로 해서 여러 분야에 대해서 고민을 하고 사유하는 시간을 가지고자 한다. 그 중에 SQL에 대한 고급 기능 이해 및 튜닝에 대한 역량강화를 위해 해당 카테고리를 만들었다. 이것에 대해 나도 모르기에 개념부터 용어부터 하나하나 실행해나가려고 한다. 이 카테고리가 자리가 잡혀갈즈음이 기대된다. 변해있는 나의 모습이~~ 더보기