DBDBDEEP
1.3.6 Single Block,Multi Block I/O 본문
Single Block I/O
I/O call 할 때 한번에 한 블록씩 요청해서 메모리에 적재하는 방식을 'Single Block I/O' 라고 한다.
SELECT * FROM emp WHERE empno = 7788;
* 인덱스에서 7788의 ROWID를 찾고
* 해당 ROWID가 있는 단일 블록을 접근 → Single Block I/O
💡 다만 해당 건수가 많으면 그에 해당하는 여러 Block을 찾아가야 한다. 이러면 Full Scan보다 성능이 나빠질 수 있을 것이다.
Single Block I/O Oepration
- 인덱스 루트 블록을 읽을 때
- 인덱스 루트 블록에서 얻은 주소 정보로 브랜치 블록을 읽을 때
- 브랜치 블록에서 얻은 주소 정보로 리프 블록을 읽을 때
- 인덱스 리프 블록에서 얻은 주소 정보로 테이블 블록 읽을 때
한번에 여러 블록씩 요청해서 메모리에 적재하는 방식을 'Multi Block I/O' 라고 한다.
Multi Block I/O
- 한 번의 I/O 요청으로 여러 블록을 동시에 읽는 방식
- 캐시에서 찾지 못한 특정 Block을 읽으려고 I/O Call 할 때 디스크 상에 그 블록과 '인접한' 블록들을 한꺼번에 읽어 캐시에
미리 적재를 하는 기능이다.
- DBMS블록 사이즈가 얼마건 간에 OS 단에서는 보통 1MB 단위로 I/O 수행
SQL> show param db_file_multiblock_read_count
NAME TYPE VALUE
---------------------------- -------- ----------------------------------------
DB_FILE_MULTIBLOCK_READ_COUNT INT32 32
일반적으로 OS Level I/O 단위가 1MB, 오라클 레벨 I/O 단위가 8KB 이므로, 위의 파라미터를 128로 설정하면 담을 수 있는 최대한 담게 되는 것이다.
SQL> show param DB_BLOCK_SIZE
NAME TYPE VALUE
------------------ ---------- -------
DB_BLOCK_SIZE INT32 8192
Table Full scan은 Multiblock I/O인 반면, 인덱스 ROWID를 이용한 테이블 액세스는 Single Block I/O 방식
'친절한 SQL 튜닝' 카테고리의 다른 글
| 2.1.5 결합 인덱스 구조와 탐색 (0) | 2026.05.16 |
|---|---|
| 2.1.3 인덱스 수직/수평적 탐색 (0) | 2026.05.16 |
| [친절한 SQL] 1.3.5 논리적 I/O vs 물리적 I/O (0) | 2026.05.11 |
| [친절한 SQL] 1.3.4 시퀀셜/랜덤 액세스 (0) | 2026.05.11 |
| [친절한 SQL] 1.1.5 옵티마이저 힌트 (0) | 2026.05.11 |