테마
본사 레거시 유통의 「매장 상품 일 판매 집계」 배치는 매일 01:00에 작업 테이블 CF11_WRK를 비우고 최근 30일 판매상품을 다시 채운 뒤 매장별 상품 집계를 뽑는다. 작업 테이블에 들어가는 행은 매일 4만 6천 행 안팎이다.
배치 담당 오과장: "지난달 말에 연간 재집계를 한 번 돌린 뒤로 집계 단계가 느려졌어요. 행 수는 그대로인데요." 통계는 매일 다시 모은다.
CF11_WRK 작업 테이블(문제 설정, CF10과 CF11을 조인한 사본): SLE_DT · SHP_NO · SLE_NO · ITM_NO · SLE_QTY · SLE_UPRC. 블록당 약 135행이 들어간다. 인덱스, 제약, 트리거는 없고 이 배치만 쓴다.CF10 판매: 500,000행 · 4,583블록 · SLE_DT VARCHAR2(8) '20220101' ~ '20231231' · 하루 약 700건 · IX_CF10_SLE_DT (SLE_DT)CF11 판매상품: 1,096,708행 · 8,204블록 · CF11_PK (SLE_NO, ITM_NO) · 판매 한 건에 평균 2.2행CF11_WRK의 소유자다. 다른 테이블이 CF11_WRK를 참조하지 않는다.-- 매일 01:00 · ① 작업 테이블 다시 채우기
DELETE FROM CF11_WRK;
INSERT INTO CF11_WRK (SLE_DT, SHP_NO, SLE_NO, ITM_NO, SLE_QTY, SLE_UPRC)
SELECT h.SLE_DT, h.SHP_NO, d.SLE_NO, d.ITM_NO, d.SLE_QTY, d.SLE_UPRC
FROM CF10 h, CF11 d
WHERE d.SLE_NO = h.SLE_NO
AND h.SLE_DT BETWEEN :v_from AND :v_to; -- 최근 30일
COMMIT;
-- ② 매장별 상품 집계
SELECT SHP_NO, ITM_NO, SUM(SLE_QTY) AS QTY, SUM(SLE_QTY * SLE_UPRC) AS AMT
FROM CF11_WRK
GROUP BY SHP_NO, ITM_NO;
[① DELETE FROM CF11_WRK — 오늘 밤 · 세션 통계]
지운 행 46,180
redo size 약 9.1 MB
undo change vector size 약 5.7 MB
db block changes 약 93,000
경과 1.4 초
[CF11_WRK — USER_TABLES (매일 수집)]
시점 NUM_ROWS BLOCKS (고수위선 아래)
10월 27일 (재집계 전) 45,902 342
10월 31일 (재집계 직후) 1,096,708 8,236
11월 29일 (오늘) 46,180 8,236
[② 매장별 상품 집계 — 오늘]
-------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 535 |00:00:00.19 | 8240 |
| 1 | HASH GROUP BY | | 1 | 535 | 535 |00:00:00.19 | 8240 |
| 2 | TABLE ACCESS FULL| CF11_WRK | 1 | 46180 | 46180 |00:00:00.15 | 8240 |
-------------------------------------------------------------------------------------
(10월 27일 같은 문장: Buffers 346)