테마
지난주 금요일 18:20 오과장이 운영 DB에 설정 한 줄을 넣었다. "12c 적응형 기능을 다 켜야 E-Rows가 맞는대요. 기본값이 FALSE인 건 보수적이라서고요." 월요일 AWR의 「SQL ordered by Executions」 1위에 처음 보는 문장이 올라왔고, 하드 파싱 시간이 세 배로 늘었다. 정산팀은 「고객 취소 주문」 화면이 가끔 한 박자 늦게 뜬다고 한다. 박팀장은 그 설정을 그대로 둘지 정해 달라고 했다.
T_ORD_BIG: 1,000,000행 · 5,826블록 · 고객마다 상태가 하나(CANCEL 고객 40명 · 고객당 500건) · ORD_ST에 FREQUENCY 히스토그램(통계 수집 정책서 1호, 5월 6일부터)-- 금요일 18:20 (오과장)
ALTER SYSTEM SET optimizer_adaptive_statistics = TRUE SCOPE = BOTH;
-- 정산팀 「고객 취소 주문」 (고객 번호는 화면이 리터럴로 넣는다)
SELECT ORD_SEQ, ORD_DT, ORD_AMT
FROM T_ORD_BIG
WHERE CUS_ID = 'CUS_000001'
AND ORD_ST = 'CANCEL';
[AWR · 월 09:00 ~ 10:00 · 지난주 월요일 같은 시간과 비교]
hard parse elapsed time 41.2초 → 133.8초
SQL ordered by Executions 1위 (지난주 0번 → 18,240번)
SELECT /* DS_SVC */ /*+ dynamic_sampling(0) no_sql_tune no_monitoring optimizer_features_enable(default) result_cache */
SUM(C1) FROM (SELECT /*+ qb_name("innerQuery") NO_INDEX_FFS("T_ORD_BIG") */ 1 AS C1
FROM "T_ORD_BIG" SAMPLE BLOCK(…) WHERE …) innerQuery
[DBA_SQL_PLAN_DIRECTIVES · DBA_SQL_PLAN_DIR_OBJECTS · T_ORD_BIG]
DIRECTIVE TYPE STATE REASON CREATED LAST_USED 대상 열
…4417 DYNAMIC_SAMPLING USABLE SINGLE TABLE CARDINALITY MISESTIMATE 05-06 월 09:12 CUS_ID, ORD_ST
…9203 DYNAMIC_SAMPLING USABLE SINGLE TABLE CARDINALITY MISESTIMATE 05-06 월 09:31 ORD_DT, ORD_ST
[「고객 취소 주문」 · 하드 파싱될 때마다]
금요일 전(FALSE) E-Rows 10 Note 없음
월요일 1회차 E-Rows 500 Note: dynamic statistics used: dynamic sampling (level=AUTO)
월요일 2회차 E-Rows 500 1 Sql Plan Directive used for this statement
월요일 3회차 E-Rows 537
월요일 4회차 E-Rows 555
실제 A-Rows 500 · 계획은 넷 다 같다(TABLE ACCESS FULL · 5,826블록)
[참고 · 지시문 …9203 이 생긴 날의 조건(10화)]
6월 AND CANCEL 히스토그램 없음 9,445 · FREQUENCY 567 · 실제 549