테마
버거원 운영 주문 ORD_RANDOM에는 인덱스가 여섯 개 있다. POS 적재가 느리다는 말이 나오자 조민우가 DBA_INDEX_USAGE 30일 치를 뽑아 정리안을 올렸다. "사용 횟수가 0이거나 거의 없는 X04, X07, X08을 지운다. 인덱스가 여섯에서 셋으로 준다."
박팀장은 이렇게 답했다. "횟수만 보고 정하지 마라. 셋이 각각 왜 있는지, 그 횟수가 무슨 읽기였는지까지 보고 와라."
ORD_RANDOM(운영본): 1,000,000행 · 22,414블록(블록당 약 45행) · 무작위 순서로 적재되어 시각이나 매장으로 시작하는 인덱스는 CLUSTERING_FACTOR가 약 1,000,000이다 · POS가 하루 약 1,370건을 INSERT하고, 매월 초 정정분 약 4만 건을 다시 넣는다ORD_HMS VARCHAR2(6) '090000' ~ '225959'에 고르게 분포(한 시간에 약 7.1%) · 같은 조건을 FULL로 읽으면 22,234블록이다SHOP 매장: 200행 · SHOP_PK (SHOP_NO) · FK FK_ORD_SHOP(ORD_RANDOM.SHOP_NO → SHOP.SHOP_NO, 2013년 선언, ENABLED) · 매년 1월 「매장 코드 정리」 배치가 개점이 취소된 매장 코드를 SHOP에서 지운다ORD_RANDOM_PK (ORD_NO) 영수증 조회 · ORD_RANDOM_X01 (ORD_DT, ORD_HMS) 일별 주문 조회 · ORD_RANDOM_X02 (ORD_DT, SHOP_NO) 월마감(매월 1일) · ORD_RANDOM_X04 (SHOP_NO) 2013년 FK를 선언할 때 만들었다 · ORD_RANDOM_X07 (ORD_HMS) 2019년 「시간대별 주문」 화면용(화면은 2022년에 없어졌다), 리프 약 2,500블록 · ORD_RANDOM_X08 (ORD_DT, ORD_HMS, SHOP_NO) 작년 클레임 조회 튜닝 실험 때 INVISIBLE로 만들어 두었다DBA_INDEX_USAGE는 기본 설정(표본 수집)이다-- 조민우 정리안 · DBA_INDEX_USAGE 30일 치 기준
DROP INDEX ORD_RANDOM_X04; -- 0회
DROP INDEX ORD_RANDOM_X07; -- 4회
DROP INDEX ORD_RANDOM_X08; -- 0회
[DBA_INDEX_USAGE · 9월 25일 ~ 10월 24일]
NAME TOTAL_ACCESS_COUNT TOTAL_ROWS_RETURNED BUCKET_1000_PLUS_ACCESS_COUNT LAST_USED
---------------- ------------------ ------------------- ----------------------------- -----------
ORD_RANDOM_PK 1,184,320 1,184,320 0 10/24 21:58
ORD_RANDOM_X01 88,210 4,625,330 0 10/24 21:57
ORD_RANDOM_X02 1 41,666 1 10/01 07:12
ORD_RANDOM_X04 0 0 0
ORD_RANDOM_X07 4 284,712 4 10/14 16:40
ORD_RANDOM_X08 0 0 0
[X07을 쓴 SQL · 분석팀 BI 도구 · 10월 14일 네 번]
SELECT SHOP_NO, COUNT(*) FROM ORD_RANDOM
WHERE ORD_HMS BETWEEN '120000' AND '125959' GROUP BY SHOP_NO
-----------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-----------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 200 |00:00:01.92 | 71372 |
| 1 | HASH GROUP BY | | 1 | 78 | 200 |00:00:01.92 | 71372 |
| 2 | TABLE ACCESS BY INDEX ROWID BATCHED| ORD_RANDOM | 1 | 78 | 71178 |00:00:01.88 | 71372 |
|* 3 | INDEX RANGE SCAN | ORD_RANDOM_X07 | 1 | 78 | 71178 |00:00:00.02 | 180 |
-----------------------------------------------------------------------------------------------------------------
3 - access("ORD_HMS">='120000' AND "ORD_HMS"<='125959')
[USER_CONSTRAINTS · ORD_RANDOM의 FK]
CONSTRAINT_NAME TYPE COLUMN R_CONSTRAINT STATUS
FK_ORD_SHOP R SHOP_NO SHOP_PK ENABLED