본문 바로가기

Oracle/성능 분석과 인스턴스 튜닝 정리

Sequential Access & Random Access 비교

Sequential Access

논리적 또는 물리적으로 연결된 순서에 따라 순차적으로 Block을 읽는 방식. 근데 Block간에는 서로 연결되어 있지 않다고 하는데... 그러면 다음 Block을 어떻게 알고 순차 적으로 읽을 수 있을까?? 답은 어제 정리한 Sagment 에 있다. (잘 기억이 나지 않는다면 ... 어제 정리한 Data Block과 Clustering Factor의 이해 를 보자.) Sagment Header 에 Extent정보를 Map 으로 가지고 있고 해당 Extent의 첫 Block부터 연속해서 읽게되면 위에서 설명 한 Sequential Access 가 가능하게 되는 것 이고 이러한 방식을 Full Table Scan 이라고 한다.

 

Random Access

어떤 파일내에 있는 특정한 레코드를 찾을 때 다른 레코드를 순차적으로 읽지 않고 원하는 레코드만을 직접 엑세스 하기 때문에 데이터를 빨리 검색 할 수 있다. (단. 데이터의 절재적인 면적이 중요하며 , index 의 Clustering Factor 에 따라서 어떤 경우는 Full table scan 이 더 빠를 수 도 있다. )

 

이해를 돕기 위해서 아래 이미지는 구루비 에서 가져옴

 select /*+ index(emp emp_x01) */

  from emp

where deptnop = 30

   and sal >= 2000

출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=28116669&

위의 사진에서 쿼리 조건에 맞는 인덱스가 당연히 모여 있으므로 시작 부분인 30/CLERK 부터 순차적으로 접근하며 나머지 조건을 확인한다.

여기서 인덱스의 조건에 맞게 어떻게 들어오고 마지막은 어디서 끝나는지 어떻게 체크를 하는 지 궁금해짐 그래서 생각해 봤다 ~~~ (그냥 혼자 생각한 방식이라서 정답이 아니예요~)

1. EMP_X01 index의 조건에 맞는 deptno가 30이 되는 시작 위치와 끝나는 위치를 찾는다.

2. 찾은 index의 범위를 순차적으로 돌아 가면서 access 하도록 시작부터 끝가지 순차적으로 테이블에 접근 하면서 sal >= 2000 의 조건을 만족 하는지 확인한다.

※ 이렇게만 보면 Random access 가 좋아보인다. 하지만 실무에서 꼭 그렇지 많은 않은 것 같았는데 어떤 케이스에서 Random I/O 가 좋고 나쁜지를 확인 해 보자.

(주의 : Random I/O , Full Scan 모두 Disk I/O 로 가정함)

문제 1 ) 1만 건의 Record를 Access 할 때 Random I/O와 Full Scan 중 어느것이 빠른가?

           Random I/O - 1,000 Block Access

           Full Scan - 100,000 Block Access

           비율 = 1 : 100

     답 : Random I/O

          여기서는 우리가 예상? 한 것 처럼 1000 Block를 접근 하는게 빠르다.

문제 2 ) 100만 건의 Record를 Access 할 때 Random I/O와 Full Scan 중 어느것이 빠른가?

           Random I/O - 100,000 Block Access

           Full Scan - 10,000,000 Block Access

           비율 = 1 : 100

     답 : Full Scan

          문제 1번과 2번의 block 접근 비율은 모두 1 : 100 이다 그러나 성능은 서로 다르게 나왔는데 그 이유는 Random Access 는 절대적인 Block의 접근 수가 많아지면

          효율이 급격하게 나빠 진다고 한다.

          그 이유는 Disk의 seek time 을 보면 해당 데이터를 읽는데 H/W 가 데이터를 읽기

          위해서 물리적으로 이동하는 시간도 검색 속도에 영향을 준다.

공부하고 있는 오라클 성능 분석과 인스턴스 튜닝 핵심 가이드 강의 중 한 부분

Access 해야 되는 테이블 내의 Record 수 ( Block 수 아님)

출처 : https://www.inflearn.com/course/%EC%98%A4%EB%9D%BC%ED%81%B4-%EC%84%B1%EB%8A%A5-%EB%B6%84%EC%84%9D