메뉴 건너뛰기

bysql.net

6. RAC 캐시 퓨전

2010.07.19 08:33

토시리 조회 수:12631

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

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

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

그중 가장 진보적인 기술로 평가받는 오라클의 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다운그레드 상황도 알려줌)
번호 제목 글쓴이 날짜 조회 수
67 Front Page file 운영자 2010.05.17 154864
66 4. Prefetch file balto 2010.07.10 28434
65 5. 오라클 Lock file 휘휘 2010.06.07 26365
64 2. DB 버퍼 캐시 file 휘휘 2010.05.24 21916
63 3. SQL 트레이스 file balto 2010.06.06 21175
62 1. 기본 아키텍처 [1] file 휘휘 2010.05.23 19898
61 2. 트랜잭션 수준 읽기 일관성 file 휘휘 2010.06.07 19566
60 5. Undo file 토시리 2010.05.31 18648
59 11. Shared Pool file 실천하자 2010.05.31 18511
58 9. Static vs. Dynamic SQL [1] balto 2010.07.04 18342
57 4. Array Processing 활용 file 휘휘 2010.07.05 18238
56 1 장. 오라클 아키텍처 운영자 2010.05.20 17840
55 5. Fetch Call 최소화 file 휘휘 2010.07.05 16839
54 9. ASH(Active Session History) 실천하자 2010.06.14 15605
53 2. SQL 처리과정 file 휘휘 2010.06.28 15340
52 3. 버퍼 Lock [1] 휘휘 2010.05.24 15225
51 1. Explain Plan 실천하자 2010.06.06 14663
50 6. 바인드 변수의 부작용과 해법 file 실천하자 2010.06.28 14660
49 8. PL/SQL 함수 호출 부하 해소 방안 토시리 2010.07.11 14022
48 7. Result 캐시 휘휘 2010.07.19 12969