Skip to content
튜닝 연습옵티마이저와 통계
OPT-048

지난달 월마감 때보다 네 배 느려진 판매 대사 배치, 지난달 계획을 찾을 데가 없다

기초PLSQL유통638 / 700

상황 ​

본사 유통의 「월 판매 대사」 배치는 매달 1일 02:00에 지난달 판매를 매장, 상품별로 묶어 POS 집계와 맞춰 본다. 배치 로그를 보면 6월 1일에는 대사 SQL이 0.4초였는데, 7월 1일 오늘은 1.4초가 걸렸다. 다음 단계가 이 결과를 기다리므로 박팀장은 지난달 계획과 무엇이 다른지부터 알고 싶어 한다. 조민우가 지난달 계획과 비교하려고 AWR의 SQL 이력을 조회했지만 오늘 것밖에 나오지 않았다. 선배가 물었다. "AWR이 며칠을 들고 있는지는 봤어?"

테이블과 인덱스 ​

  • CF10 판매: 500,000행 · 4,583블록 · 한 달 약 21,000건 · CF11 판매상품: 1,096,708행 · 8,204블록
  • 대사 SQL은 한 달에 한 번, 1일 02:00에만 돈다(SQL_ID 2bq8r6d1x0f7c)
  • AWR: 1시간 간격 · 보존 8일 · TOPNSQL 기본값 · Diagnostic Pack 계약 있음
  • 통계 이력 보존 31일 · 배치 로그에는 SQL마다 시작, 끝, 걸린 시간, 처리 행 수만 남는다

원본 SQL ​

sql
-- 조민우가 돌린 조회 : 지난달 1일 02:00의 계획을 찾는다
SELECT s.SNAP_ID, n.BEGIN_INTERVAL_TIME, s.PLAN_HASH_VALUE,
       s.EXECUTIONS_DELTA, s.BUFFER_GETS_DELTA, s.ELAPSED_TIME_DELTA
  FROM DBA_HIST_SQLSTAT s, DBA_HIST_SNAPSHOT n
 WHERE n.SNAP_ID = s.SNAP_ID
   AND n.DBID = s.DBID
   AND n.INSTANCE_NUMBER = s.INSTANCE_NUMBER
   AND s.SQL_ID = '2bq8r6d1x0f7c'
 ORDER BY s.SNAP_ID;
-- 결과 : 7월 1일 02:00 스냅샷 한 줄뿐

실행계획 학습용 예시 ​

xplan
[DBA_HIST_WR_CONTROL]
 SNAP_INTERVAL       RETENTION           TOPNSQL
 +00 01:00:00.0      +08 00:00:00.0      DEFAULT

[DBA_HIST_SNAPSHOT]
 가장 오래된 스냅샷 06-23 09:00 · 가장 최근 07-01 09:00 · 193개

[DBA_HIST_SQLSTAT · SQL_ID 2bq8r6d1x0f7c]
 SNAP_ID  시작          PLAN_HASH_VALUE  EXECUTIONS_DELTA  BUFFER_GETS_DELTA  ELAPSED_TIME_DELTA
    6214  07-01 02:00      3802991541                 1             87,512             1.41초
 (6월 1일 02:00의 스냅샷은 6월 9일에 지워졌다)

[배치 로그 · 대사 SQL]
 06-01 02:03:11  0.4초  654행
 07-01 02:03:09  1.4초  654행

[DBA_TAB_STATS_HISTORY · 6월 1일 이후]
 CF10  06-28 23:40  ·  CF11  06-28 23:41

문제 ​

  1. 지난달 계획을 AWR에서 찾을 수 없는 이유를 위 설정으로 설명하시오. 보존 기간이 충분했더라도 남지 않았을 수 있는 경우도 쓰시오.
  2. 다음 달부터는 월마감 계획을 지난달과 견줄 수 있도록 AWR 설정을 고치고, 월마감 구간을 따로 남기는 SQL을 쓰시오. 오늘 원인을 고친 뒤 그 계획을 지키는 방법도 쓰시오.
원본 SQL을 고쳐 쓰세요. 인덱스 DDL과 힌트도 쓸 수 있습니다.
무엇이 문제였고 왜 이렇게 고쳤는지 쓰세요.0자