테마
무대는 버거원 POS 본사 DB다. 2012 ~ 2013년 두 해의 주문을 DW로 이관했고, 운영에는 2013년 12월 한 달만 남기기로 했다(매장 화면은 이번 달만 본다). 개발팀이 토요일 밤에 반영할 작업을 넘겼고, 테스트 DB에서 ORD 쪽을 먼저 돌려 봤다.
매장 정산 담당: "지운 뒤에 매장별 집계 화면을 눌러 봤는데 하나도 안 빨라졌어요." 반영 창은 토요일 23:00 ~ 01:00이고, 그 시간에는 매장 영업이 없다. 앞으로 매달 지난달을 이관하고 지울 계획이다.
ORD 주문: 1,000,000행 · 22,422블록 · ORD_DT VARCHAR2(8) '20120101' ~ '20131231' · 날짜순 적재 · 2013년 12월 42,408행(4.2%)ORD_PK (ORD_NO)와 ORD_X01 (ORD_DT, ORD_HMS)이다. ORD를 가리키는 FK는 없다. POS 연동 계정 POS_IF에 SELECT와 INSERT 권한이 있다.ORD_ITEM 주문상품: 2,472,717행 · 55,265블록. 같은 방식으로 지운다(12월분 약 10만 행).SELECT SHOP_NO, COUNT(*) FROM ORD GROUP BY SHOP_NO다(인덱스 없이 FULL).ORD_RANGE가 월별 파티션 복사본이다).-- 토요일 23:00 반영 예정 (개발팀)
DELETE FROM ORD WHERE ORD_DT < '20131201';
DELETE FROM ORD_ITEM WHERE ORD_DT < '20131201';
COMMIT;
[세션 통계 — 테스트 DB · DELETE FROM ORD WHERE ORD_DT < '20131201' 한 번 · 인덱스 2개]
경과 시간 7분 12초 (그중 대부분이 리두 로그 교체 대기)
삭제 행 957,592
session logical reads 약 6,700,000
db block changes 약 5,700,000
redo size 약 740 MB
undo change vector size 약 360 MB
user commits 1
-------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-------------------------------------------------------------------------------------
| 0 | DELETE STATEMENT | | 1 | | 0 |00:07:11.84 | 6702K |
| 1 | DELETE | ORD | 1 | | 0 |00:07:11.84 | 6702K |
|* 2 | TABLE ACCESS FULL| ORD | 1 | 957K| 957K|00:00:00.61 | 22422 |
-------------------------------------------------------------------------------------
2 - filter("ORD_DT"<'20131201')
[매장별 집계 화면 — 같은 문장 · 지우기 전과 뒤 (통계는 지운 뒤 다시 모았다)]
TABLE ACCESS FULL A-Rows Buffers USER_TABLES
지우기 전 1,000,000 22,426 NUM_ROWS 1,000,000 · BLOCKS 22,422
DELETE 뒤 42,408 22,426 NUM_ROWS 42,408 · BLOCKS 22,422