테마
본사 영업관리팀의 「고액 판매 TOP 100」 화면은 판매상품 가운데 수량 × 단가가 큰 100줄을 보여 준다. 월요일 9시 주간 회의 직전에 팀원 12명이 한꺼번에 열고, 그 시간마다 DBA에게 TEMP 사용량 경보가 온다.
개발자는 회사 공통 페이징 틀(안쪽에서 정렬하고, 가운데에서 ROWNUM을 번호로 붙이고, 바깥에서 그 번호로 거른다)을 그대로 가져다 썼다. 화면은 한 페이지뿐이다.
CF11 판매상품: 1,096,708행 · 8,204블록 · SLE_NO VARCHAR2(15) · ITM_NO · SLE_QTY · SLE_UPRC · CF11_PK (SLE_NO, ITM_NO) · 다른 인덱스 없음 · 통계 최신V$PGASTAT의 global memory bound)가 약 20MB로 내려간다. 한가한 시간에는 약 100MB다SELECT *
FROM (SELECT ROWNUM AS rn, a.*
FROM (SELECT SLE_NO, ITM_NO, SLE_QTY, SLE_UPRC,
SLE_QTY * SLE_UPRC AS SLE_AMT
FROM CF11
ORDER BY SLE_QTY * SLE_UPRC DESC) a)
WHERE rn <= 100
[월요일 09:01]
-------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | Used-Mem | Used-Tmp|
-------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 100 |00:00:02.41 | 8204 | | | |
|* 1 | VIEW | | 1 | 1096K| 100 |00:00:02.41 | 8204 | | | |
| 2 | COUNT | | 1 | | 1096K|00:00:02.22 | 8204 | | | |
| 3 | VIEW | | 1 | 1096K| 1096K|00:00:02.05 | 8204 | | | |
| 4 | SORT ORDER BY | | 1 | 1096K| 1096K|00:00:01.88 | 8204 | 61M| 20M (1)| 55M|
| 5 | TABLE ACCESS FULL| CF11 | 1 | 1096K| 1096K|00:00:00.19 | 8204 | | | |
-------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("RN"<=100)
[같은 SQL · 화요일 15시] 4번 줄 Used-Mem 54M (0) · Used-Tmp 없음 · A-Time 0.92초 · Buffers 8,204