테마
본사는 매일 밤 판매상품(CF11)을 정보계로 옮긴 뒤, 원천 건수와 옮긴 건수를 맞춰 보는 대사 스크립트를 돌린다. 그 가운데 건수를 세는 단계 하나가 매일 3초 가까이 걸려 야간 작업표에서 눈에 띈다.
스크립트를 쓴 조민우는 이렇게 말했다. "테이블이 크니까 인덱스로 세라고 힌트를 넣었다." 아래는 이관 직후, 버퍼 캐시에 인덱스 블록이 거의 없을 때 잰 값이다.
CF11 판매상품: 1,096,708행 · 8,204블록 · 컬럼은 모두 NOT NULLCF11_PK (SLE_NO, ITM_NO): BLEVEL 2 · 리프 약 4,290블록 · 통계 최신 · 다른 인덱스 없음db_file_multiblock_read_count = 128(교재 04화 실측 환경과 같다)SELECT /*+ INDEX(b CF11_PK) */ COUNT(*)
FROM CF11 b
--------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads |
--------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:02.84 | 4293 | 4291 |
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:02.84 | 4293 | 4291 |
| 2 | INDEX FULL SCAN| CF11_PK | 1 | 1096K| 1096K|00:00:02.71 | 4293 | 4291 |
--------------------------------------------------------------------------------------------
[세션 통계 · 대기 이벤트 — 같은 실행]
physical read total IO requests 4,291
physical read total multi block requests 0
db file sequential read 4,291회 · 2.6초
INDEX FULL SCAN이 블록을 읽는 방식과 세션 통계로 설명하시오.