테마
야간 정산 배치는 T_ORD의 주문을 T_ORD_STLM으로 옮긴 뒤(적재 단계), 취소 주문의 정산 행을 지운다(정리 단계). 정리 단계는 늘 0.1초 안팎이었는데 어젯밤부터 1.9초가 걸렸다.
배치 담당 오과장: "SQL은 한 글자도 안 바꿨다. 바뀐 것은 어제 저녁 DBA가 통계 수집 작업을 22시로 옮긴 것뿐이다." 22시에 T_ORD_STLM은 저녁 테스트 배치가 TRUNCATE만 하고 끝난 빈 테이블이었다. 적재 단계는 23시에 테이블을 다시 채운다.
T_ORD_STLM 정산: 실제 100,000행 · 640블록 · 인덱스 없음 · 통계는 0행(22시 수집) · T_ORD를 ORD_SEQ 순으로 읽어 적재한다T_ORD 주문: 100,000행 · 896블록 · PK_T_ORD (ORD_SEQ) (높이 2) · 취소(ORD_ST = 'CANCEL') 2,000건 · 통계 최신DELETE FROM T_ORD_STLM s
WHERE EXISTS (SELECT 1
FROM T_ORD o
WHERE o.ORD_SEQ = s.ORD_SEQ
AND o.ORD_ST = 'CANCEL')
-----------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-----------------------------------------------------------------------------------------------------
| 0 | DELETE STATEMENT | | 1 | | 0 |00:00:01.91 | 307912 |
| 1 | DELETE | T_ORD_STLM | 1 | | 0 |00:00:01.91 | 307912 |
| 2 | NESTED LOOPS SEMI | | 1 | 1 | 2000 |00:00:01.74 | 300640 |
| 3 | TABLE ACCESS FULL | T_ORD_STLM | 1 | 1 | 100K|00:00:00.03 | 640 |
|* 4 | TABLE ACCESS BY INDEX ROWID| T_ORD | 100K| 1 | 2000 |00:00:01.52 | 300000 |
|* 5 | INDEX UNIQUE SCAN | PK_T_ORD | 100K| 1 | 100K|00:00:00.61 | 200000 |
-----------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - filter("O"."ORD_ST"='CANCEL')
5 - access("O"."ORD_SEQ"="S"."ORD_SEQ")