테마
지난달 정기 점검에서 본사 유통 DB의 옵티마이저 설정을 기본값(ALL_ROWS)으로 되돌렸다(OPT-041의 절차). 반복 SQL은 미리 베이스라인으로 올려 두어 대부분 그대로였는데, 2009년에 만든 PowerBuilder 「점포 판매 조회」 화면 하나가 느려졌다. 한 달에 며칠만 쓰여서 베이스라인을 올릴 때 커서 캐시에 없었다. 이 화면은 소스가 남아 있지 않아 SQL을 고칠 수 없다. 결과를 20행씩 보여 주고, 사용자는 대부분 첫 화면만 보고 닫는다. 이 DB에는 Tuning Pack이 없다.
CF10 판매: 500,000행 · 4,583블록 · CF10_PK (SLE_NO)(SLE_NO는 날짜로 시작해 판매 순서와 같다) · 매장 6곳(매장당 약 83,000건)CF11 판매상품: 1,096,708행 · 8,204블록 · CF11_PK (SLE_NO, ITM_NO) 높이 3 · 판매 한 건에 평균 2.2줄7w2q9cj1sd0m4이다(V$SQL에서 찾았다).-- PowerBuilder 화면이 보내는 SQL (소스 없음 · 고칠 수 없다)
SELECT a.SLE_NO, a.SLE_DT, a.SLE_HMS, b.ITM_NO, b.SLE_QTY
FROM CF10 a, CF11 b
WHERE a.SHP_NO = :1
AND b.SLE_NO = a.SLE_NO
ORDER BY a.SLE_NO DESC
[기본값으로 되돌린 뒤 — 첫 화면 20행을 받고 닫았을 때]
----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | Used-Mem |
----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 20 |00:00:00.93 | 12787 | 8120 | |
| 1 | SORT ORDER BY | | 1 | 182K| 20 |00:00:00.93 | 12787 | 8120 | 11M (0)|
|* 2 | HASH JOIN | | 1 | 182K| 182K|00:00:00.71 | 12787 | 8120 | 13M (0)|
|* 3 | TABLE ACCESS FULL| CF10 | 1 | 83333 | 83312 |00:00:00.08 | 4583 | 0 | |
| 4 | TABLE ACCESS FULL| CF11 | 1 | 1096K| 1096K|00:00:00.42 | 8204 | 8120 | |
----------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("B"."SLE_NO"="A"."SLE_NO")
3 - filter("A"."SHP_NO"=:1)
[되돌리기 전 — FIRST_ROWS 설정 · AWR 의 같은 SQL_ID] CF10_PK 를 거꾸로 읽는 NL · 20행 · 42블록 · 0.01초