인덱스 Batch I/O

xlwdn·2022년 10월 20일
0

인덱스 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를 잠시 미뤄두고 일정량 모은 뒤 일괄적으로 처리하게되었다.

  1. 리프 블록의 ROWID로 버퍼 캐시 조회 → 실패 시 ROWID 저장
  2. 실패한 ROWID 일정량 저장 시 블록 번호로 정렬하여 Multiblock I/O 수행

특징


기존 single I/O 방식에서는 인덱스 만으로 결과 집합의 정렬이 보장되었으나, Batch I/O 작동시 이러한 방식의 결과 집합을 보장하지 않게 되었다.

정리


  • 부분 범위 처리 가능하다.
  • 데이터 정렬 순서를 보장하지 않는다.
  • 버퍼캐시에서 읽는 블록 수는 동일하다. ⇒ 디스크 I/O 미발생시 성능에는 차이가 없다.

0개의 댓글