1._기본_아키텍처
2012.03.02 09:23
01 기본 아키텍처
오라클 기본 아키텍처를 개념적으로 간단히 그려보면, 그림 1-2처럼 우리가 흔히 사용하는 워드프로세서와 매우 흡사하다.
워드프로세서를 통해 사용자가 입력하는 내용을 파일에 직접 I/O 한다면 수 메가바이트의 작은 파일을 편집하더라도 속도 때문에 큰 불편을 느끼게 된다. 당연히 메모리 캐시의 도움이 필요하다.
같은 원리로 오라클은 데이터베이스와 이를 액세스하는 프로세스 사이에 SGA라고 하는 메모리 캐시 영역을 두고 있다. (그림 1-3)
디스크를 경유한 입출력 : 물리적으로 액세스 암(Arm)이 움직이면서 헤드를 통해 데이터를 읽고 쓴다.
메모리 캐시를 통한 입출력 : 전기적 신호에 불과하기 때문에 디스크 I/O에 비교할 수 없이 빠르다.
오라클의 특징 (워드프로세서와 비교)
l 많은 프로세스가 동시에 데이터를 액세스한다
n 사용자 데이터를 보호하는 Lock
n 공유 메모리 영역인 SGA상에 위치한 데이터 구조에 대한 액세스를 직렬화 하기 위한 LOCK 메커니즘(=Latch)도 필요
l 블록 단위로 읽고, 저장할 때도 변경이 발생한 블록만 찾아 블록 단위로 저장
l 백그라운드 프로세스인 DBWR와 CKPT 프로세스가 캐시와 데이터파일 간 동기화를 주기적으로 수행
오라클 구성 요소
l Oracle Server = Instance + Database
l Instance = SGA Memory + Background Processes
n SGA 공유 메모리 영역과 이를 액세스하는 프로세스 집합을 합쳐서 인스턴스라 한다.
l Database = Datafile + Redolog file + Control file + Parameter file
n 오라클에서는 디스크에 저장된 데이터 집합을 데이터베이스라 한다.
l SGA Memory = Shared Pool + Database Buffer Cache +
l Redo Log buffer + Large Pool + Java Pool
l Shared Pool = Library Cache + Dictionary Cache
그림 1-4는 오라클 인스턴스를 표현한 것인데, 그림에서 보듯 프로세스 집합을 다시 서버 프로세스와 백그라운드 프로세스 집합으로 나눌 수 있다.
서버 프로세스
l 오라클에 접속하면 각 클라이언트를 위한 전용 서버 프로세스가 떠서 사용자에게 필요한 서비스를 제공한다. (Shared Server로 구성하지 않았다면)
l SQL을 파싱하고 필요하면 최적화를 수행
l 커서를 열어 SQL을 실행하면서 블록을 읽고
l 읽은 데이터를 정렬해서 클라이언트가 요청한 결과집합을 만들어 네트워크를 통해 전송
그림 1-5는 오라클에 접속할 때 내부적으로 어떤 과정을 거쳐 세션이 수립되는지를 보여준다.
주목할 점은, Listener에 연결요청을 하는 순간 하나의 프로세스를 띄우고 PGA 메모리를 할당한다는 사실이다. 이는 비용이 매우 큰 작업이므로 하나 또는 일련의 SQL문을 수행하기 위해 매번 연결요청을 한다면 결코 성능이 좋을 리 없다.
ð 오라클에 접속하는 애플리케이션을 구축할 때 반드시 Connection Pool 기능이 필요한 이유가 여기에 있다.
ð 한번 커넥션을 맺으면 작업을 완료하더라도 이를 해제하지 않고 애플리케이션 서버에 Pooling 하고 있다가 반복 재사용한다.
ð 소프트웨어 세계에서 가장 중요한 화두인 재사용성은 데이터베이스 성능튜닝의 핵심 원리이다.
RAC(Real Application Cluster)
l 하나의 데이터베이스를 액세스하는 다중 인스턴스로 구성
l Shared Cache 방식을 지원 (Cache Fusion 기술)
l Global Cache 개념을 사용하므로 Local Cache에 없는 데이터 블록을 이웃 노드에서 전송받아 서비스 할 수 있다.
l 다른 인스턴스에서 갱신하고 아직 커밋하지 않은 Active 상태의 블록까지도 디스크를 경유하지 않고 Dirty 버퍼 상태에서 네트워크를 통해 서로 주고 받으며 갱신을 수행
n OPS 환경에서는 타노드에 캐싱된 Dirty 버퍼를 읽고자 할 때 디스크로의 쓰기 작업이 선행되어야만 했고, 이처럼 디스크를 거치는 동기화 과정을 Ping 이라고 불렀다.
SQL을 튜닝할 때 가장 많이 사용하는 툴킷은 뭐니뭐니해도 SQL Trace 라고 할 수 있다.
이중 query와 current 항목의 의미와 차이점을 정확히 이해하는가?
오라클 아키텍쳐를 설명하다 query와 current 항목에 대한 얘기를 끄집어 내는 이유는 이 항목들에 대해 설명하다 보면 자연스럽게 오라클만의 독특하고 핵심적인 아키텍처 대부분을 다루게 되기 때문이다.
Chapter 01. 오라클 아키텍처에서 오라클만의 독특한 읽기 일관성(Read Consistency) 모델을 이해하게 된다면 그것으로 성공이다!!
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
6 | 5._Undo | dasini | 2012.03.11 | 25348 |
5 |
2._DB_버퍼_캐시
![]() | 시와처 | 2012.03.04 | 10681 |
» |
1._기본_아키텍처
![]() | AskZZang | 2012.03.02 | 8825 |
3 | 1_장._오라클_아키텍처 | AskZZang | 2012.03.01 | 5212 |
2 | 3._버퍼_Lock | 박영창 | 2012.02.23 | 7578 |
1 |
Front Page
![]() | 운영자 | 2012.02.20 | 131458 |