테마
CRM팀의 「고객 월별 구매」 화면과 캠페인 추출은 구체화 뷰 MV_CUS_MON(고객 2,000명 × 36개월 = 72,000행)을 직접 읽는다. 밤 체인의 02:00 단계가 이 MV를 기본 옵션 그대로 COMPLETE로 새로 고친다.
체인이 아침을 넘기는 날이 생겨 단계마다 시간을 재 보니 이 단계가 38초였고, 아카이브 로그도 이 단계에서 61MB가 생겼다. 원장 T_ORD_BIG을 한 번 읽어 묶는 데는 1초도 걸리지 않는다. 이 MV를 읽는 화면과 추출은 08시부터 돈다.
T_ORD_BIG: 1,000,000행 · 5,826블록MV_CUS_MON: 72,000행 · 410블록 · CUS_ID · ORD_YM · ORD_CNT · ORD_AMT · 인덱스 IX_MV_CUS_MON (CUS_ID, ORD_YM) · REFRESH COMPLETE ON DEMAND · LOGGINGSELECT CUS_ID, TO_CHAR(ORD_DT, 'YYYYMM') AS ORD_YM, COUNT(*) AS ORD_CNT, SUM(ORD_AMT) AS ORD_AMT FROM T_ORD_BIG GROUP BY CUS_ID, TO_CHAR(ORD_DT, 'YYYYMM')-- 밤 체인 02:00 단계 (기본 옵션 그대로)
BEGIN
DBMS_MVIEW.REFRESH(list => 'MV_CUS_MON', method => 'C');
END;
[02:00 단계 · TKPROF 요약 (새로 고침이 낸 재귀 SQL)]
문장 count cpu elapsed query current rows
DELETE FROM "SQLP"."MV_CUS_MON" 1 9.84 14.92 418 221,903 72,000
INSERT INTO "SQLP"."MV_CUS_MON" SELECT … 1 11.20 22.37 6,004 219,377 72,000
그 밖의 재귀 SQL (사전 조회 · 기록) 38 0.41 0.68 1,212 96 —
[같은 단계 · 세션 통계 차이]
redo size 64,118,220
undo change vector size 19,604,312
db block changes 447,206
[INSERT … SELECT 의 실행계획]
-------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Used-Mem |
-------------------------------------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 1 | | 0 |00:00:22.37 | 225K| |
| 1 | LOAD TABLE CONVENTIONAL | MV_CUS_MON | 1 | | 0 |00:00:22.37 | 225K| |
| 2 | HASH GROUP BY | | 1 | 72000 | 72000 |00:00:00.61 | 5826 | 5243K (0)|
| 3 | TABLE ACCESS FULL | T_ORD_BIG | 1 | 1000K| 1000K|00:00:00.08 | 5826 | |
-------------------------------------------------------------------------------------------------------------