테마
매월 1일 03시에 도는 「PG 대사 파일 추출」은 그해 1월 1일부터 지난달 말까지의 구매 완료 주문을 주문번호순으로 고정 길이 레코드로 만들어 파일로 내린다. 지난달 PG사가 레코드 형식을 100바이트에서 300바이트(뒤쪽 207바이트는 예비 영역 공백)로 바꿔 달라고 했고, 개발자는 SQL의 마지막 RPAD 하나만 고쳤다.
이번 달 1일 추출은 0.9초에서 4.1초로 늘었고 TEMP를 85MB 썼다. 같은 시각에 다른 배치들이 돌아 work area 하나의 상한은 약 40MB다.
T_ORD_BIG: 1,000,000행 · 5,826블록 · ORD_SEQ NUMBER(유일) · CUS_ID 'CUS_000123' · ORD_DT DATE(전부 자정) · ORD_ST(COMPLETE 90%) · ORD_AMTORD_SEQ로 시작하는 인덱스도 없다.SELECT RPAD(TO_CHAR(ORD_SEQ), 20)
|| RPAD(CUS_ID, 40)
|| TO_CHAR(ORD_DT, 'YYYYMMDD')
|| LPAD(TO_CHAR(ORD_AMT), 15, '0')
|| RPAD(ORD_ST, 10)
|| RPAD(' ', 207) AS REC
FROM T_ORD_BIG
WHERE ORD_DT >= DATE '2024-01-01'
AND ORD_DT < DATE '2024-12-01'
AND ORD_ST = 'COMPLETE'
ORDER BY ORD_SEQ
[이번 달 1일 03:00 · 레코드 300바이트]
-----------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | 1Mem | Used-Mem | Used-Tmp|
-----------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 275K|00:00:04.12 | 5833 | | | | |
| 1 | SORT ORDER BY | | 1 | 275K| 275K|00:00:04.12 | 5833 | 86M| 2654K| 40M (1)| 85M|
|* 2 | TABLE ACCESS FULL| T_ORD_BIG | 1 | 275K| 275K|00:00:00.16 | 5826 | | | | |
-----------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(("ORD_ST"='COMPLETE' AND "ORD_DT">=TO_DATE(' 2024-01-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
"ORD_DT"<TO_DATE(' 2024-12-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))
[지난달 1일 · 레코드 100바이트] 1번 줄 OMem 31M · Used-Mem 28M (0) · Used-Tmp 없음 · A-Time 0.9초