테마
버거원 본사 회계팀은 매주 월요일 지난주 주문의 주문번호와 주문 일시를 내려받아 PG사 정산 파일과 맞춘다. 감사 기간에는 한 달 치를 받는다. 주간 파일 하나에 6초 넘게 걸리고, 그동안 POS 적재 세션의 응답이 늦어진다는 민원이 들어왔다. 본사 DBA 규정에는 이런 줄이 있다. "ORD_RANDOM에는 인덱스를 더 만들지 않는다(2013년 POS 장애 뒤 결정)." 박팀장은 이렇게 주문했다. "인덱스 없이 할 수 있는 것부터, 대가까지 적어 와라."
ORD_RANDOM(운영본): 1,000,000행 · 22,414블록(블록당 약 45행) · 서버 교체 때 무작위 순서로 다시 적재했다 · ORD_DT VARCHAR2(8) 2012 ~ 2013(하루 약 1,370건) · 2013-12-02 ~ 12-08 주문 9,589건 · ORD_NO NUMBER(10)은 PK라 NOT NULLORD_RANDOM_PK (ORD_NO): BLEVEL 2 · 리프 약 2,090블록 · ORD_RANDOM_X01 (ORD_DT, ORD_HMS): BLEVEL 2 · 리프 3,774블록 · CLUSTERING_FACTOR 999,958(교재 04화 실측) · 통계 최신db_file_multiblock_read_count = 128ORD: 내용이 같고 주문 시각 순으로 쌓였다 · ORD_X01의 CLUSTERING_FACTOR 22,223SELECT ORD_NO, ORD_DT, ORD_HMS
FROM ORD_RANDOM
WHERE ORD_DT BETWEEN :v_from AND :v_to
ORDER BY ORD_DT, ORD_HMS
---------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads |
---------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 9589 |00:00:06.31 | 9631 | 9418 |
|* 1 | FILTER | | 1 | | 9589 |00:00:06.31 | 9631 | 9418 |
| 2 | TABLE ACCESS BY INDEX ROWID| ORD_RANDOM | 1 | 950 | 9589 |00:00:06.30 | 9631 | 9418 |
|* 3 | INDEX RANGE SCAN | ORD_RANDOM_X01 | 1 | 950 | 9589 |00:00:00.02 | 42 | 38 |
---------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(:V_FROM<=:V_TO)
3 - access("ORD_DT">=:V_FROM AND "ORD_DT"<=:V_TO)
[세션 통계] physical read total IO requests 9,418 (multi block 0) · db file sequential read 9,418회 · 5.9초
ORD에 쓰면 어떻게 되는지도 설명하시오.