테마
10월 반기 점검(T8) 날이다. 조민우가 대기 줄(ACCEPTED NO)이 있는 핵심 SQL 세 개에 진화 작업을 돌려 리포트를 가져왔다. 오과장은 결재 올릴 작업 목록을 내밀었다. "과제 셋을 IMPLEMENT로 받아들이고, 인덱스 정리 대장대로 11월에 IX_ORD_BIG_DT_SEQ도 지우죠. 대장에 사용 기록 0건이라고 적혀 있잖아요." 박팀장은 이렇게 말했다. "받아들일 것, 미룰 것, 지울 것을 하나씩 근거를 붙여서요."
T_ORD_STLM: 100,000행 · 640블록 · 2025년 7월에 IX_STLM_DT_AMT (STLM_DT, STLM_AMT)를 만들었다T_ORD_BIG: 1,000,000행 · 5,826블록 · 인덱스 IX_ORD_BIG_DT · IX_ORD_BIG_DT_AMT · IX_ORD_BIG_DT_SEQ (ORD_DT, ORD_SEQ)(2024년 4월, 09화)M_CUS: 2,000행 · 30블록 · PK_M_CUS (CUS_ID)IX_ORD_BIG_DT_SEQ와 IX_STLM_DT_AMT가 없었다.T_ORD_STLM 재적재 중에 모인 빈 테이블 통계(NUM_ROWS 0)가 하루 동안 쓰였다-- 오과장 안 ① 세 과제를 모두 받아들인다
DECLARE
r NUMBER;
BEGIN
r := DBMS_SPM.IMPLEMENT_EVOLVE_TASK(task_name => 'SPM_T8_ALL'); -- A, B, C 를 한 과제로 돌렸다
END;
/
-- 오과장 안 ② 인덱스 정리 대장 2호대로 11월 정기 작업에서 지운다
DROP INDEX IX_ORD_BIG_DT_SEQ;
[DBA_SQL_PLAN_BASELINES · 대기 줄이 있는 셋]
SQL PLAN_NAME ORIGIN ACCEPTED CREATED 계획
A SQL_PLAN_…a1 MANUAL-LOAD-FROM-CURSOR-CACHE YES 23-09-04 TABLE ACCESS FULL T_ORD_STLM
A SQL_PLAN_…a2 AUTO-CAPTURE NO 25-07-21 INDEX RANGE SCAN IX_STLM_DT_AMT
B SQL_PLAN_…b1 MANUAL-LOAD-FROM-CURSOR-CACHE YES 23-09-04 HASH JOIN (M_CUS · T_ORD_STLM FULL)
B SQL_PLAN_…b2 AUTO-CAPTURE NO 25-03-10 NESTED LOOPS (T_ORD_STLM → PK_M_CUS → M_CUS)
C SQL_PLAN_…c1 MANUAL-LOAD-FROM-CURSOR-CACHE YES 23-09-04 TABLE ACCESS FULL T_ORD_BIG + SORT ORDER BY STOPKEY
C SQL_PLAN_…c2 AUTO-CAPTURE NO 24-04-29 INDEX RANGE SCAN DESCENDING IX_ORD_BIG_DT_SEQ + COUNT STOPKEY
[진화 리포트 (REPORT_EVOLVE_TASK · SPM_T8_ALL) · 실행 통계와 FINDINGS만 옮겨 적음]
SQL 계획 Elapsed(초) Buffer Gets Rows Processed FINDINGS
A 기준 .006100 640 1
시험 .000210 13 1 passed the benefit criterion ... 48.92308 times better
B 기준 .052000 672 3
시험 .690000 102,741 3 failed the benefit criterion ... 0.00654 times worse
C 기준 .118000 5,826 10
시험 .000400 14 10 passed the benefit criterion ... 416.14286 times better
[인덱스 정리 대장 2호 · 2025-09-30 작성]
IX_ORD_BIG_DT_SEQ (ORD_DT, ORD_SEQ)
근거 : 최근 30일 V$SQL_PLAN과 DBA_HIST_SQL_PLAN에서 이 인덱스를 쓴 계획 0건 · DBA_INDEX_USAGE 0
결론 : 11월 정기 작업에서 DROP (적재할 때 고칠 인덱스를 하나 줄인다)