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
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
26 | 4._DBMS_XPLAN_패키지 | AskZZang | 2012.04.04 | 5612 |
25 | 7._Response_Time_Analysis_방법론과_OWI | 시와처 | 2012.04.01 | 5743 |
24 | 2._Cursor_Sharing | 운영자 | 2012.05.28 | 5992 |
23 | 9._ASH(Active_Session_History) | 정찬호 | 2012.04.09 | 6071 |
22 | 2._트랜잭션_수준_읽기_일관성 | AskZZang | 2012.03.20 | 6145 |
21 | 3._비관적_vs._낙관적_동시성_제어 | dasini | 2012.03.26 | 6185 |
20 | 10._V$SQL | 정찬호 | 2012.04.09 | 6544 |
19 | 7._PLSQL_함수의_특징과_성능_부하 | 남송휘 | 2012.05.15 | 6642 |
18 | 3._버퍼_Lock | 박영창 | 2012.02.24 | 7261 |
17 | 5._Direct_Path_IO | 남송휘 | 2012.05.21 | 7559 |
16 | 7._세션_커서_캐싱 | 박영창 | 2012.04.22 | 7793 |
15 | 1._기본_아키텍처 | AskZZang | 2012.03.02 | 8350 |
14 | 9._Snapshot_too_old | 박영창 | 2012.03.19 | 9734 |
13 | 10._대기_이벤트 | 박영창 | 2012.03.19 | 10373 |
12 | 2._DB_버퍼_캐시 | 시와처 | 2012.03.04 | 10432 |
11 | 8._Statspack_AWR | 시와처 | 2012.04.01 | 11489 |
10 | 4._동시성_구현_사례 [1] | dasini | 2012.03.27 | 11698 |
9 | 8._블록_클린아웃 | 시와처 | 2012.03.19 | 12015 |
8 | 5._오라클_Lock | 시와처 | 2012.03.26 | 12579 |
7 | 4._커서_공유 | 남송휘 | 2012.04.27 | 16112 |