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
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
46 | 5._오라클_Lock | 시와처 | 2012.03.26 | 12579 |
45 | 4._동시성_구현_사례 [1] | dasini | 2012.03.27 | 11698 |
44 | 6._V$SYSTEM_EVENT | 시와처 | 2012.04.01 | 3311 |
43 | 7._Response_Time_Analysis_방법론과_OWI | 시와처 | 2012.04.01 | 5743 |
42 | 8._Statspack_AWR | 시와처 | 2012.04.01 | 11489 |
41 | 3._SQL트레이스 | sapius | 2012.04.04 | 26853 |
40 | 4._DBMS_XPLAN_패키지 | AskZZang | 2012.04.04 | 5612 |
39 | 5._V$SYSSTAT | AskZZang | 2012.04.04 | 4599 |
38 | 1._SQL과_옵티마이저 | dasini | 2012.04.06 | 3612 |
37 | 2._SQL_처리과정 | dasini | 2012.04.06 | 21688 |
36 | 3._라이브러리_캐시_구조 | dasini | 2012.04.06 | 5232 |
35 | 11._End-To-End_성능관리 | 남송휘 | 2012.04.09 | 3032 |
34 | 12._데이터베이스_성능_고도화_정석_해법 | 남송휘 | 2012.04.09 | 4574 |
33 | 4장._라이브러리_캐시_최적화_원리 | dasini | 2012.04.09 | 2721 |
32 | 9._ASH(Active_Session_History) | 정찬호 | 2012.04.09 | 6071 |
31 | 10._V$SQL | 정찬호 | 2012.04.09 | 6544 |
30 | 7._세션_커서_캐싱 | 박영창 | 2012.04.22 | 7793 |
29 | 8._애플리케이션_커서_캐싱 | 박영창 | 2012.04.22 | 5243 |
28 | 5._바인드_변수의_중요성 | 시와처 | 2012.04.23 | 4299 |
27 | 6._바인드_변수의_부작용과_해법 | 시와처 | 2012.04.23 | 4645 |