2._Memory_vs._Disk_IO
2012.05.23 05:18
1. I/O 효율화 튜닝의 중요성
- 데이터 I/O속도 : 디스크 < 메모리(전기적 신호)
- DB 버퍼 캐시를 경유래 I/O를 수행한다는 것,
읽고자 하는 블록을 먼저 버퍼 캐시에서 찾아보고, 찾지 못할때만 디스크에서 읽는다.
이렇게 되면 디스크 상에서 데이터파일을 읽는 것보다 평균 10000배 이상 빠르다.
- 유한한 메모리 자원을 좀 더 효율적으로 사용해야 하므로 자주 엑세스하는 블록들이 캐시에 더 오래 남아 있도록
LRU알고리즘을 사용한다. 결국 디스크 I/O를 최소화하고 대부분 처리를 메모리에서 할 수 있도록
버퍼 캐시 효율성을 높이는 것이 중요하다.
2. 버퍼 캐시 히트율(Buffer Cache Hit Ration)
- 전체 읽은 블록 중에서 얼만큼을 메모리 버퍼 캐시에서 찾았는지를 나타내는 것
- BCHR = (캐시에서 곧바로 찾은 블록 수 / 총 읽은 블록 수 ) * 100
= (논리적 블록 읽기 - 물리적 블록 읽기) / 논리적 블록읽기 *100
= (1-물리적 블록 읽기) / 논리적 블록 읽기 *100
- 이는 곧 물리적인 디스크 읽기를 수반하지 않고 곧바로 메모리에서 블록을 찾은 비율을 의미
- Direct Path Read 방식으로 읽는 경우를 제외하면 모든 블록 읽기는 버퍼 캐시를 통해 이루어진다.(가장 먼저 버퍼 캐시를 읽는다.)
Disk : 물리적 블록 읽기
Query+Current : 논리적 블록 읽기
위 두 값을 더한 값이 총읽은 블록 수 (Direct Path Read가 없다면)
그렇다면 위 정보를 통해서, 총 1351677개 블록을 읽었고 그중 601458개는 디스크에서 버퍼 캐시로 적재해서 읽었다.
그래서 버퍼 캐시 히트율은 750219 / 1351677 *100 = 55.5%
* 논리적 블록읽기가 메모리에서 읽은 블록 개수라고 착각해선 안된다. 총 읽은 블록 수로 봐야 한다.
- 간단히 말하면 논리적으로 100개 블록을 읽기 요청했는데 55개는 메모리에서 찾고 나머지는 메모리에서 못찾아서
디스크 I/O를 발생시켜 메모리에 적재했다는 의미다.
- 이러한 논리적인 블록 요청 횟수를 줄이고 물리적으로 디스크에서 읽어야 할 블록 수를 줄이는 것이
I/O효율화 튜닝의 핵심 원리다.
- 하지만 같은 블록을 반복적으로 엑세스하는 형태의 어플리케이션이라면
논리적인 I/O요청이 비효율적으로 많이 발생하는데도 BCHR은 높게 나타단다. (한계..)
이는 자주 엑세스하였기 때문에 메모리에 적재된 것 뿐이지 블록을 찾은 과정에서 래치를 얻어야 하므로 큰 비용을 수반한다.
ex) 대량의 데이터를 기준으로 NL조인 방식을 사용해 작은 테이블을 반복적으로 Lookup하는 경우
3. 네트워크, 파일시스템 캐시가 I/O효율에 미치는 영향
- ORACLE EXADATA의 SMART SCAN
기존 SCAN 방식
SMART SCAN 방식
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
66 | 부록 | 남송휘 | 2012.06.06 | 2426 |
65 | 8._IO_효율화_원리 | 운영자 | 2012.06.06 | 4121 |
64 | 3._Deterministic_함수_사용_시_주의사항 | 정찬호 | 2012.05.29 | 4091 |
63 | 2._Cursor_Sharing | 운영자 | 2012.05.28 | 5992 |
62 | 7._Result_캐시 | 운영자 | 2012.05.27 | 4157 |
61 | 3._Single_Block_vs._Multiblock_IO | 정찬호 | 2012.05.23 | 3960 |
» | 2._Memory_vs._Disk_IO | 정찬호 | 2012.05.23 | 4167 |
59 | 1._블록_단위_IO | 정찬호 | 2012.05.22 | 3925 |
58 | 6장._IO_효율화_원리 | 정찬호 | 2012.05.22 | 3808 |
57 | 1._Library_Cache_Lock_Pin | 남송휘 | 2012.05.21 | 3964 |
56 | 6._RAC_캐시_퓨전 | 남송휘 | 2012.05.21 | 17532 |
55 | 5._Direct_Path_IO | 남송휘 | 2012.05.21 | 7559 |
54 | 4._Prefetch | 남송휘 | 2012.05.21 | 3596 |
53 | 8._PLSQL_함수_호출_부하_해소_방안 | 남송휘 | 2012.05.21 | 3458 |
52 | 5._Fetch_Call_최소화 [1] | 박영창 | 2012.05.15 | 4811 |
51 | 7._PLSQL_함수의_특징과_성능_부하 | 남송휘 | 2012.05.15 | 6642 |
50 | 6._페이지_처리의_중요성 | 남송휘 | 2012.05.15 | 3118 |
49 | 4._Array_Processing_활용 | 시와처 | 2012.05.14 | 3770 |
48 | 3._데이터베이스_Call이_성능에_미치는_영향 | 시와처 | 2012.05.13 | 3382 |
47 | 10._Dynamic_SQL_사용_기준 | 남송휘 | 2012.05.07 | 4276 |