[Oracle] Table Random Access

HYEOB KIM·2023년 6월 13일
0

Oracle

목록 보기
44/58
post-custom-banner

Table Random Access


데이터를 저장하는 block을 한번에 여러 개를 access 하는 것이 아닌 한번에 하나의 block만을 access하는 Single Block I/O 방식입니다.

Table Full Scan
: Multi Block I/O 방식이라고 하며, 한번에 여러 개의 block을 access하는 방식입니다.

대표적으로 인덱스를 스캔하여 확인 ROWID를 통해 테이블에 access하는 경우 Table Random Access가 발생합니다.

1) 확인 랜덤 액세스

WHERE절, HAVING절 조건의 특정 컬럼이 인덱스이 아닐 경우 인덱스 스캔을 통해 추출한 ROWID로 테이블의 데이터에 랜덤 액세스 하는 과정을 확인 랜덤 액세스라고 합니다.

예를 들어,

where empno = 10
  and ename = 1

라는 2개의 조건이 있고, empno는 인덱스 컬럼, ename는 일반 컬럼이라 한다면

결국 empno 조건을 만족하는 모든 데이터에 대해 테이블 액세스를 통해 ename 조건에 부합하는 값을 찾아야 합니다.

이 경우 인덱스 스캔 후 테이블 랜덤 액세스의 횟수와 일반 컬럼 조건에 필터링된 데이터의 개수에 차이가 발생할 수 있습니다. 일반 컬럼 조건에 맞지 않는 데이터는 버려지기 때문입니다.

2) 추출 랜덤 액세스

select ename
from emp
where empno=10;

WHERE 절의 컬럼들은 모두 인덱스에 존재하지만 SELECT 절의 컬럼이 인덱스에 존재하지 않을 때 where 절 인덱스 스캔 이후 SELECT와 관련해 테이블에 랜덤 액세스하는 과정이 추출 랜덤 액세스입니다.

이 경우 랜덤 액세스의 횟수와 추출된 데이터의 개수는 같습니다.

3) 정렬 랜덤 액세스

select empno, ename
from emp
where empno=10
order by 2;

SELECT 이후 ORDER BY 절에 사용된 컬럼이 인덱스 컬럼이 아닌 경우 테이블에 액세스 해서 정렬에 필요한 데이터에 랜덤 액세스하게 되는데 이 과정을 정렬 랜덤 액세스라고 합니다.

이 경우 랜덤 액세스의 횟수와 추출된 데이터의 개수는 같습니다.

요약


추출 랜덤 액세스와 정렬 랜덤 액세스는 랜덤 액세스 횟수와 추출되는 건수가 동일하지만
확인 랜덤 액세스는 추출되는 데이터의 건수가 감소할 수 있고 랜덤 액세스 중 가장 많은 부하를 발생시킵니다.

따라서 SQL 튜닝은 최우선적으로 확인 랜덤 액세스를 제거하기 위해 노력해야 합니다.


참고

profile
Devops Engineer
post-custom-banner

0개의 댓글