시퀀셜 액세스와 랜덤 액세스
데이터베이스/친절한 SQL 튜닝

시퀀셜 액세스와 랜덤 액세스

반응형

데이터베이스에서 데이터를 블록단위로 읽는다. 1 ~ 3 byte와 같이 작은 데이터를 읽을때도 하나의 블록을 읽어들인다. 그리고 테이블뿐만 아니라 인덱스도 블록단위로 읽어들인다.


데이터베이스의 총 블록 사이즈를 알고 싶으면 다음 쿼리를 통해 확인해 볼 수있다.

1
select value from v$parameter where name = 'db_block_size';
cs


그럼 테이블과 인덱스를 블록단위로 읽는 방식에 대해서 알아보자.


테이블 또는 인덱스를 읽는 방식


시퀀셜 액세스 (Sequential Access)

논리적 또는 물리적으로 연결된 순서에 따라 차례대로 블록을 읽어들이는 방식이다. 인덱스 리프블록은 앞뒤를 가리키는 주소값으로 서로 연결되어 있는데 이를 이용하여 순차적으로 스캔하는 방식이다.

테이블 블록은 서로 논리적으로 서로 연결고리를 가지고 있지는 않지만 세그먼트 헤더가 각 익스텐트들에 대한 주소를 맵의 형태로 가지고 있어 그를 이용하여 Table Full Scan이 가능하도록 하는 구조이다.


랜덤 액세스 (Random Access)

논리적, 물리적 순서가 아닌 레코드 하나를 읽기 위해 한 블록씩 접근하는 방식이다.



그림을 보면 알겠지만, 시퀀셜 액세스의 경우 각 엘리먼트들의 그룹을 순차적으로 접근하는 반면에 랜덤 액세스는 조각으로 쪼개져있으며 저장이 가능한 공간에 저장되어 있어서 필요한 블록을 읽어 들일때마다 한 블록씩 접근해야 한다.

반응형