h1.02 Memory vs. Disk I/O
h3.(1) I/O 효율화 튜닝의 중요성

  • 디스크를 경유한 입출력은 물리적인 액세스 암을 사용하므로 전기적 신호를 활용하는 메모리를 통한 입출력보다 느리다.
    (평균적으로 10000배 이상 성능 차이가 난다고 한다.)
  • 모든 데이터를 메모리에 올려놓고 사용하면 좋겠지만 비용, 기술적 측면에서 어려운 점이 있다.
  • 따라서 유한한 메모리 자원을 효율적으로 관리할 수 있도록 버퍼캐시 효율성을 높이는 것이 데이터베이스 성능을 좌우하는 열쇠이다.

h3.(2) 버퍼 캐시 히트율(Buffer Cache Hit Ratio)

  • 정의 : 물리적인 디스크 읽기를 수반하지 않고 곧바로 메모리에서 블록을 찾은 비율
  • BCHR = ( 캐시에서 곧바로 찾은 블록 수 / 총 읽은 블록 수 ) * 100
    = ( (논리적 블록읽기 - 물리적 블록읽기) / 논리적 블록읽기 ) * 100
    = ( 1 - (물리적 블록읽기) / (논리적 블록읽기) ) * 100
  • Direct Path Read 방식을 제외하고 모든 블록 읽기는 버퍼 캐시를 통해 이루어진다.

논리적 블록읽기와 BCHR


논리적 블록읽기는 '메모리 블록 읽기'가 아니라 '블록 요청 횟수' 또는 '총 읽은 블록수'로 이해해야 한다.

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse       12      0.02       0.00          0          2          0           0
Execute     12      0.00       0.00          0          0          0           0
Fetch       24      0.02       0.03         91       1104          0          12
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       48      0.04       0.04         91       1106          0          12

위 trace 결과에서 논리적 블록읽기는 query와 current의 합이며 여기서는 1106개 블록을 읽었고 그중 91개는 디스크에서 읽었다.
여기서 BCHR을 계산해보면.. 

(1106-91)/1106*100 = 91.77%
(1 - 91/1016)*100 = 91.04%

  • 논리적인 블록 요청 횟수를 줄이고, 그럼으로써 물리적으로 디스크에서 읽어야할 블록수를 줄이는 것이 I/O 효율화 튜닝의 핵심 원리이다.
  • BCHR의 한계점 : 같은 블록을 반복적으로 액세스하는 형태의 애플리케이션이라면 높을 수밖에 없다.
    BCHR가 높더라도 필요 없는 블록까지 읽고 버린다면 비효율이 발생하고 버퍼캐시를 효율적으로 활용할 수 없다.
    논리적으로 읽어야 할 블록 수의 절대량이 많다면 반드시 SQL을 튜닝해야 한다.

h3.(3) 네트워크, 파일시스템 캐시가 I/O 효율에 미치는 영향

  • 네트워크를 이용한 I/O 기법이 일반화 되고있어 네트워크를 통한 전송량을 최소화하려는 쪽에 기술이 모아지고 있다.
  • 최근 오라클은 데이터베이스 서버와는 독립적으로 스토리지 자체에 CPU와 RAM을 탑재하는 하드웨어 솔루션을 도입했다.
    • 이 기술의 핵심은 스마트 스캔이라는 기술을 이용해 쿼리에서 필요로 하는 컬럼과 로우만을 네트워크를 통해 전송하는 데 있다.
    • 이 기술을 이용하면 스토리지에서 데이터베이스 서버로 보내지는 데이터양을 획기적으로 줄여주고, 서버의 CPU 부하를 감소시킨다.
  • 오라클 RAC에서도 인스턴스끼리 네트워크를 통해 캐시된 블록들을 서로 공유하므로 메모리 I/O 성능에도 네트워크 속도가 많은 영향을 준다.
  • 같은 양의 디스크 I/O가 발생하더라도 I/O 시간이 크게 차이가 날 수 있다.
    OS에서 지원하는 파일 시스템 버퍼 캐시와 SAN 캐시 때문에 생기는 현상일 때가 많다.
    {tip:title=SAN(storage area network)}
    '광저장장치영역네트워크'로 번역되고 '스토리지 에어리어 네트워크'라고도 한다. 특수 목적용 고속 네트워크로서,
    대규모 네트워크 사용자들을 위하여 서로 다른 종류의 데이터 저장장치를 관련 데이터 서버와 함께 연결해 별도의
    랜(LAN:근거리통신망)이나 네트워크를 구성해 저장 데이터를 관리한다.
    {tip}
  • 데이터베이스를 사용하는 데 있어 파일 시스템 버퍼 캐시는 최소화해야 한다.
    데이터베이스 자체적으로 캐시 영역을 갖고 있으므로 이를 위한 공간을 더 크게 할당하는 것이 더 효과적이다.
  • 디스크 속도 문제이든, SAN 문제이든, RAC 인터커넥트 문제이든 I/O 성능에 관한 가장 확실하고 근본적인
    해결책은 논리적 블록 요청 횟수를 최소화하는 것이다.