본문 바로가기

데이터베이스/오라클

Batch I/O

인덱스를 경유하는 Table Access는 기본적으로 Single Block I/O를 통한 Random Access 방식으로 접근한다.

그렇기에 Table에 접근해야 하는 경우가 많다면 엄청난 부하를 일으키며 대부분의 성능저하를 유발하는 요인이다.

그렇기에 테이블 접근의 경우수가 많다면 MultiBlock I/O를 사용하는 Table Full Sacn을 사용하는 이유가 여기에 있다.

또한 인덱스는 기본적으로 Buffer Cache를 경유하기 때문에, 접근에 대한 Latch획득 과정또한 시스템에 부하를 주는 요인으로 꼽을 수 있다.

 

위의 표를 보듯이 결국은 좋은 성능을 내기 위해서는 랜덤 Access를 줄이는 작업을 수행해야 한다는 의미이다.

 

이 문제점을 해결하기 위해서 오라클 12c 이상의 버전에서는 배치 I/O라는 기능을 도입하였다.

건건히 Table에 대한 접근을 진행하지 않고 일괄로 Table에 접근해 처리하는 방식이다.

 

 

하지만 이 방식은 한가지 부작용을 초래한다.

기본적으로 인덱스 Key 컬럼 순으로 정렬되 있어 Order by 절에 해당 내용 key컬럼을 대입한다면, Sort Order by 연산을 줄여주는 효과를 가져다 준다.

하지만 Batch I/O로 수행시 정렬순서를 보장해주지 않기 때문에 정렬이 되지 않는 결과를 초래할수 있다.

 

하지만 SQL문에 Order by문을 명시시 Batch I/O방식으로 진행하지 않기 때문에 항상 Order by가 필요하면 SQL문에 기입하여야 한다.

'데이터베이스 > 오라클' 카테고리의 다른 글

Lock의 종류  (0) 2022.07.10
Partition Index  (0) 2022.03.09
바인드 변수  (0) 2022.03.09
DB Block, Extends, Segment  (0) 2022.03.08
Buffer Cache Hit Ratio  (0) 2022.03.08