테마
회계법인이 감사 자료로 2013년 주문 상품 내역을 파일로 달라고 했다. 요구한 칸은 주문번호, 주문일, 주문시각, 매장, 상품, 수량 여섯 개다. 개발자는 "나중에 칸을 더 달라고 할지 몰라서" 주문 헤더를 o.*로 뽑았다.
추출을 돌릴 때마다 TEMP 사용 경보가 울린다. 오과장은 "블록은 두 테이블을 한 번씩 읽은 만큼이라 정상인데, PGA를 늘려야 하나"라고 묻는다.
ORD 주문: 1,000,000행 · 22,422블록 · 한 행이 약 180바이트 (ORD_NO · ORD_DT · ORD_HMS · SHOP_NO 말고 문자열 채움 컬럼이 여럿 있다) · 2013년 500,218행ORD_ITEM 주문상품: 2,472,717행 · 55,265블록 · ORD_ITEM_PK (ORD_NO, ITEM_ID) · 2013년 주문의 상품 1,236,018줄pga_aggregate_target 512M · AUTO · 이 시간대에 해시 조인 하나가 받을 수 있는 work area는 약 100MB · 통계 최신SELECT o.*, i.ITEM_ID, i.ORD_ITEM_QTY
FROM ORD o, ORD_ITEM i
WHERE o.ORD_DT BETWEEN '20130101' AND '20131231'
AND i.ORD_NO = o.ORD_NO
-------------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | Writes | OMem | 1Mem | Used-Mem | Used-Tmp|
-------------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1236K|00:00:07.93 | 77687 | 11950 | 11950 | | | | |
|* 1 | HASH JOIN | | 1 | 1236K| 1236K|00:00:07.93 | 77687 | 11950 | 11950 | 131M| 9952K| 97M (1)| 94M|
|* 2 | TABLE ACCESS FULL| ORD | 1 | 500K| 500K|00:00:00.29 | 22422 | 0 | 0 | | | | |
| 3 | TABLE ACCESS FULL| ORD_ITEM | 1 | 2472K| 2472K|00:00:00.61 | 55265 | 0 | 0 | | | | |
-------------------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("I"."ORD_NO"="O"."ORD_NO")
2 - filter(("O"."ORD_DT">='20130101' AND "O"."ORD_DT"<='20131231'))