Oracle IO 유형
1. Conventional IO
- server process 가 Data Access 할때 'Buffer Cache'로 Access
- sever process가 Data 찾을려고 Buffer Cache LRU 를 먼저 본다
- 없으면
- Disk 에서 해당 Block을 찾아서 Buffer Cache에 올린다
- server process는 Buffer Cache에 올라간 Data를 읽는다
- 단점
- 대량의 Data를 읽을 경우 : 기존의 buffer cache에 pin된 Data를 out 시켜야함 + latch도 있고
2. Direct IO
- buffer Cache 로 데이터를 올리지 않고 , server process가 direct로 Disk 에서 읽음
Direct Path Read 하는 경우
- 일정 크기 이상의 full scan
- Create table AS select 구문 (Select)
- Parallel Query 이용한 Full Scan
Direct Path Write 하는 경우
- insert 시 append 힌트를 줄 경우 - 기본은 conventional IO이지만 , 힌트 주면 direct IO로 수행됨
- Create table AS select 구문 (Create)
- parallel DML
한번 disk 에서 읽을때 하나의 block 만 가져오는게 아니라 multi block으로 여러 block을 읽는다.
[hidden parameter] db_file_direct_io_count = ( def ) 1M
즉, 8K block을 128개 한번에 buffer cache로 가져옴
Direct Path R/W Temp
servre process 가 정렬, hashing 작업 등으로 PGA 활용 할 때, 메모리가 부족할 경우 Temp Tablespace에 Read/Write 수행하면서 발생하는 Wait Event
정렬해야할 데이터가 클 경우
Direct Path Read Temp
Merge sort를 위해 temp에서 읽음
Direct Path WriteTemp
PGA에서 1차 정렬하고 temp tablespace에 내림
해결 방안
1. PGA크기 늘리기 (V$PGA_TARGET_ADVICE 참고)
2. Temporary Tablespace의 I/O Throughput 증대 (SSD로 교체)
- SSD는 HDD 보다 random io는 굉장히 좋아지지만 (10배)
- IO throughput은 SSD가 50%정도 or 2배 정도만 좋아진다
3. SQL튜닝 - 불필요한 정렬/해싱 제거
- 그렇다고 Hashh Join해야할걸 Nest Loop Join으로 하는 멍청한 짓은 하면 안된다
'DBMS > Oracle' 카테고리의 다른 글
[Oracle] Wait Event - Buffer Cache (0) | 2024.05.15 |
---|---|
[Oracle] Wait Event - Latch, Enqueu, Mutex (0) | 2024.05.12 |
[Oracle] Wait event - DB File Sequential Read & DB File Scattered Read (0) | 2024.04.28 |
[Oracle] Wait Event (0) | 2024.04.19 |
[Oracle] Data Dictionary (0) | 2024.04.16 |