본문 바로가기

sql_tuning

Section2. FullScan과 Random IO 비교

728x90
반응형

[출처: 오라클 성능 분석과 인스턴스 튜닝 핵심 가이드]

 

■ Random I/O 증가량에 따른 성능 변화 (Random I/O, Full Scan 모두 Disk I/O 로 가정)
- 1만건의 Record를 Access하기 위해서 Random I/O 시 1,000 Block이 필요하고
   Full Scan 시 십만 Block 필요할 경우 어떤 Access가 더 빠른가?
- 백만건의 Record를 Access 하기 위해서 Random I/O 시 십만 Block 이 필요하고
   Full Scan 시 천만 Block 필요 할 경우 어떤 Access 가 더 빠른가?

-> Random I/O 는 그 절대량이 늘어날 수록 H/W 적인 제약으로 인하여 수행 성능이 급격하게 저하 됨.

    - 특정 Table의 컬럼값 분포도가 균일하게 10% 일 경우, 가령 컬럼값 A,B,C,D,E,F,G,H,I,J 열 종류가 모두 균일하게 건 수가 같다고 가정하자.
    - 1억건이 넘는 대용량 테이블에 해당 컬럼으로 단독 인덱스를 생성할 것인가?
        -> 분포도 10% 가정에 의해서 각 컬럼은 1천만 건 수를 가지게 되므로 1천 만건 컬럼에 인덱스를 걸 수밖에 없는데 비효율적임. 결합 인덱스를 고려해봐야 함.
    - 만일 동일 테이블에 해당 컬럼값 분포도가 균일하게 1% 라면, 가령 컬럼값이 100종류이면 모두 균일하게 건수가 같다면 해당 컬럼으로 단독 인덱스를 생성할 것인가?
        -> 1억건의 1%면 100만건. 퍼센테이지만 보면 단독 인덱스를 걸어야 할 것 같지만, 사실상 100만건 이므로 여전히 단독 인덱스 생성은 효율적이지 못함(즉 퍼센테이지에 속지 말라는 말)

 

Table Full Scan 과 Random I/O 비교
- Full Scan 은 1건을 찾은 100만건을 찾든 Table 전체를 Scan 하는 것은 동일함.
    - 따라서 Record 건수에 따른 수행시간 변화가 거의 없음.
- 인덱스를 경유한 Random I/O는 Access 해야 하는 Record 가 늘어나면 Record Access 건수도 같이 증가함.
    - Random I/O는 Block Access 건수가 일정 수치이상 증가하면 수행 시간이 급격하게 느려지게 됨.

728x90
반응형