6. RAC 캐시 퓨전

조회 수 4113 추천 수 0 2010.08.03 00:44:09
토시리 *.42.166.122

동시사용자가 많은 시스템의 데이터베이스를 부하분산 목적으로 물리적으로 나누는 등의 노력이 기울여져왔다.

그러나, 데이터베이스를 물리적으로 나눌시 데이터의 실시간 동기화를 위해서는 많은 우라작업이 필요하므로 실제적인 부하분산효과를 보기가 어렵다.

최근에는 다시 데이터베이스를 하나로 통합하고 이를 액세스하는 인스턴스를 여러개 두는 공유 디스크방식이 도입되기 시작했다.

그중 가장 진보적인 기술로 평가받는 오라클의 RAC에 대해 알아보자. 


  • 글로벌 캐시라는 개념을 사용, 접근하는 인스턴스노드들의 버퍼 캐시를 하나의 버퍼 캐시로 간주하고 사용.
  • 즉, 읽으려는 데이터블록이 다른 인스턴스노드 어딘가에 캐싱되어 있나 찾아본 후, 캐싱되어 있다면 그 데이터를 그대로 읽음. (디스크 I/O를 피함)
  • 만약, 어떤 노드에도 캐싱되어 있지 않다면 비로소, 디스크의 읽기권한을 부여받은 뒤 디스크에서 읽음. (디스크 I/O발생)


RAC환경에서 Current블록

  • Shared Mode Current (SCur)
    1. 동시에 여러노드에 캐싱 가능.
    2. 자주 사용되는 데이터 블록이 SCur모드로 각 노드에 캐싱될 때가 최상의 효율.
    3. 단, 그중 한 노드가 XCur모드로 업그레드를 요청하는 순간 나머지 노드에 캐싱되 있던 SCur블록들은 모두 Null다운그레이드로 더 이상 사용불가가 됨.
  • Exclusive Mode Current (XCur)
    1. 단 하나의 노드에만 존재할 수 있다.


RAC 노드간 버퍼 캐시를 공유하는 캐시퓨전 원리에 대해 자세히 알아보자.



(1) 전송 없는 읽기 (디스크직접읽기, SCur모드)

6-01.JPG 

  1. 노드A가 SCur모드로 K블록을 읽으려, 그 블록 리소스 마스터인 노드B에 요청을 보내 캐싱여부를 확인.
  2. 노드B는 K블록의 캐싱상태를 확인(全노드), 존재하지 않기에 노드A에 디스크일기 권한부여.
  3. 노드A는 디스크에서 K블록을 읽고 로컬에 캐싱.

(2) 읽기/읽기 전송 (SCur모드)

6-02.JPG

  1. 노드C가 SCur모드로 K블록을 읽으려, 그 블록 리소스 마스터인 노드B에 요청을 보내 캐싱여부를 확인.
  2. 노드B는 K블록의 캐싱상태를 확인(全노드), 노드A에 존재확인, 노드A에게 노드C로 전송 지시.
  3. 노드A는 노드C로 해당블록을 전송.
  4. 노드C는 전송받은 블록을 SCur모드로 캐싱한후, 마스터인 노드B에게 메세지를 보냄.

(3) 읽기/쓰기 전송 (XCur모드)

 6-03.JPG

  1. 노드C가 K블록을 갱신하려고, 그 블록 리소스 마스터인 노드B에 XCur모드로 업그레이드 요청을 함.
  2. 노드B는 K블록의 캐싱상태를 확인(全노드), 캐싱하고 있는 노드A 해당블록의 Null모드 다운그레이드를 지시.
  3. 노드A는 해당블록을 Null모드로 다운그레이드후, 작업상황을 노드C에게 알림.
  4. 노드C는 해당블록을 XCur모드로 업그레이드하고 결과를 마스터인 노드B에게 알림.(타노드 Null다운그레드 상황도 알려줌)


(4) 쓰기/쓰기 전송 (XCur모드)

   6-04.JPG

  1. 노드A가 K블록을 갱신하려고, 그 블록 리소스 마스터인 노드B에 XCur모드로  요청을 함.
  2. 노드B는 K블록의 캐싱상태를 확인(全노드), 캐싱하고 있는 노드A 해당블록의 Null모드 다운그레이드를 지시.
  3. 노드A는 해당블록을 Null모드로 다운그레이드후, 작업상황을 노드C에게 알림.
  4. 노드C는 해당블록을 XCur모드로 업그레이드하고 결과를 마스터인 노드B에게 알림.(타노드 Null다운그레드 상황도 알려줌)

(5) 쓰기/읽기 전송 (SCur모드)

  6-04.JPG

  1. 노드C가 K블록을 SCur모드로 읽기위해, 그 블록 리소스 마스터인 노드B에 SCur모드로 읽기 요청을 함.
  2. 노드B는 K블록의 캐싱상태를 확인(全노드), 캐싱하고 있는 노드A 해당블록의 전송을 지시.
  3. 노드A는 해당블록을 노드C에 전송하고 자신의 캐싱정보를 SCur모드로 다운그레이드 함.
  4. 노드C는 해당블록을 SCur모드로 캐싱하고 결과를 마스터인 노드B에게 알림.(타노드 Null다운그레드 상황도 알려줌)