[출처: 오라클 성능 분석과 인스턴스 튜닝 핵심 가이드]
Hard Disk 의 데이터 Access 원리
- 해당 데이터를 Access 하기 위해 Disk는 어떤 움직임을 해야 하는가?
- Hard Disk 는 Spindle 과 Head의 기계적인 움직임을 통해 데이터에 엑세스 함.
- 이러한 기계적 움직임은 Hard Disk Access 속도의 많은 부분을 차지하고 있음.
- 데이터의 Access랑 보다 주어진 데이터를 Access 하기 위한 기계적 움직임이 얼마나 많았는지가
상대적으로 Hard Disk의 수행속도를 더 좌우함.
- 따라서 자주 Access 해야 되는 Block을 이동해야 하는 Random I/O의 경우 Hard Disk의 수행 속도가 느려질 수 있음.
-> Sequential Access 의 경우, B->C 에서만 Head가 작게 왔다갔다 함.
-> Random Access 의 경우, B->D 라면 Head가 크게 왔다갔다 해야 함.
I/O Access 유형
- Sequential Access (순차 Scan)
- 보조기억장치에 저장 된 파일로부터 정해진 순서대로 데이터를 순차적으로 검색함.
순차 엑세스에서는 데이터들이 차례차례로 읽혀짐. 스캔 방식으로 동작함.
- Table Full Scan: Multi 블록을 I/O 단위로 사용 가능, DB_FILE_MULTIBLOCK_READ_COUNT 로 설정(풀스캔 일때만 동작하는 파라미터).
- Random Access (임의 Access)
- 어떤 파일 내에 있는 특정한 레코드를 찾을 때 다른 레코드를 순차적으로 읽지 않고 원하는 레코드만을 직접 엑세스.
데이터를 빨리 검색 할 수 있는 액세스 방식.
- 검색 될 레코드를 명시하기 위해서는 임의로 엑세스 하려는 레코드들은 그들과 관련 된 Key를 가져야 함.
- Index 를 경유한 Table Random Access: 1 블록이 I/O 단위
- 디스크 Access Time (Seek Time)
- 데이터를 읽어 들이거나 기록하기 위해 디스크 드라이브의 판독/기록 헤드의 위치를 표면 위의 특정 트랙으로 이동시키는데 소요되는 시간.
테이블 Access I/O 유형
- 인덱스를 경유한 Table Random Access
- 인덱스 스캔을 통해 알게 된 Rowid 값을 가지고 Table 을 Access 함.(Row id 는 테이블의 위치를 알 수 있는 고유의 값)
- 인덱스를 통해 테이블을 Access 할 경우 테이블 Block Access 순서가 Random 이 되는 Random I/O 발생
- 대부분의 OLTP 성 Application 은 Random I/O Access 유형
- Table Full Scan
- 테이블은 인덱스를 경유하지 않을 경우 Segment의 처음 부터 끝까지 순차적으로 Full Scan 함.
- 데이터를 읽는 양은 Random I/O 보다 많을 수 있으나 대용량의 데이터를 읽을 경우는 Random I/O 보다 훨씬 효율적.
'sql_tuning' 카테고리의 다른 글
Section2. HDD와 Flash Storage 그리고 RAID의 이해 (0) | 2023.11.06 |
---|---|
Section2. FullScan과 Random IO 비교 (0) | 2023.11.01 |
Section2. 클러스터링 팩터 (0) | 2023.10.31 |
Section2. 데이터베이스 블록(Database Block)의 이해 (0) | 2023.10.29 |
Section2. 최적 저장 구조를 위한 고려사항과 Indexing 및 Full Scan의미 (0) | 2023.10.29 |