[출처: 오라클 성능 분석과 인스턴스 튜닝 핵심 가이드]
■ 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 건수가 일정 수치이상 증가하면 수행 시간이 급격하게 느려지게 됨.
'sql_tuning' 카테고리의 다른 글
Section2. OLTP와 BATCH 그리고 I/O Latency와 Throughput의 이해 (0) | 2023.11.06 |
---|---|
Section2. HDD와 Flash Storage 그리고 RAID의 이해 (0) | 2023.11.06 |
Section2. Sequential 과 Random Access (0) | 2023.10.31 |
Section2. 클러스터링 팩터 (0) | 2023.10.31 |
Section2. 데이터베이스 블록(Database Block)의 이해 (0) | 2023.10.29 |