테마
본사 레거시 유통에서는 매주 월요일 새벽에 매장 POS 판매를 CF10으로 이관한다. 매장 두 곳의 POS가 요일 칸(SLE_DOW)을 비워 보내거나 틀리게 보내서, 이관이 끝나면 운영 담당이 요일 보정 SQL을 돌린다.
보정 한 번에 18초가 걸리고 redo가 약 118MB씩 생겨서, 월요일마다 아카이브 로그 공간 경보가 울린다. 운영 담당: "틀린 건 매주 3천 건 남짓인데, 로그는 왜 이렇게 많이 쌓이죠?"
CF10 판매: 500,000행 · 4,583블록 · SLE_DT VARCHAR2(8) · SLE_DOW VARCHAR2(1)(일요일 '1' ~ 토요일 '7', NULL 허용)SLE_DOW가 NULL인 행 2,840건, 값이 틀린 행 312건. 나머지 496,848행은 이미 맞다.CF10_PK (SLE_NO)뿐이다. 트리거는 없다. DB는 ARCHIVELOG 모드다.'D' 형식이 일요일을 1로 낸다).-- 매주 월요일 이관 뒤 · 요일 보정 (운영 담당)
UPDATE CF10
SET SLE_DOW = TO_CHAR(TO_DATE(SLE_DT, 'YYYYMMDD'), 'D');
COMMIT;
[세션 통계 — 보정 UPDATE 한 번]
경과 시간 18.4초
갱신된 행 500,000 (값이 실제로 바뀐 행 3,152)
redo size 약 118 MB
undo change vector size 약 41 MB
db block changes 약 1,010,000
-------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 1 | | 0 |00:00:18.40 | 517K |
| 1 | UPDATE | CF10 | 1 | | 0 |00:00:18.40 | 517K |
| 2 | TABLE ACCESS FULL| CF10 | 1 | 500K| 500K|00:00:00.21 | 4583 |
-------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
(없음 — WHERE 절이 없다)