728x90
인덱스 Batch I/O
배경
인덱스를 통한 Table Random Access는 Single Block I/O으로 작동하기에 엄청난 부하를 유발하는데, 심지어 버퍼 캐시 경유 비용 + 래치 경합까지 발생할 수 있어 로우가 많아 질수록 각종 Wait Event가 발생해 성능이 급격히 저하되었다.
이에 Table Random Access 성능 개선을 위해 오라클은 12c 이상부터 Batch I/O를 선보였다.
실행계획은 “TABLE ACCESS BY INDEX ROWID BATCHED “로 표시된다.
Batch I/O 작동 방식
기존 인덱스를 이용해 버퍼 캐시에서 찾지 못하면 Disk I/O를 수행하였던 Single I/O 방식과 달리 Batch I/O는 테이블 블록 Disk I/O를 잠시 미뤄두고 일정량 모은 뒤 일괄적으로 처리하게되었다.
- 리프 블록의 ROWID로 버퍼 캐시 조회 → 실패 시 ROWID 저장
- 실패한 ROWID 일정량 저장 시 블록 번호로 정렬하여 Multiblock I/O 수행
특징
기존 single I/O 방식에서는 인덱스 만으로 결과 집합의 정렬이 보장되었으나, Batch I/O 작동시 이러한 방식의 결과 집합을 보장하지 않게 되었다.
정리
- 부분 범위 처리 가능하다.
- 데이터 정렬 순서를 보장하지 않는다.
- 버퍼캐시에서 읽는 블록 수는 동일하다. ⇒ 디스크 I/O 미발생시 성능에는 차이가 없다.
'Database' 카테고리의 다른 글
데이터베이스 병렬처리 (0) | 2023.06.10 |
---|---|
파티셔닝 (0) | 2023.06.10 |
Index Scan (0) | 2023.06.10 |
Oracle IOT (0) | 2023.06.10 |
인덱스 ROWID (0) | 2023.06.10 |