메뉴 건너뛰기

bysql.net

1._기본_아키텍처

2012.03.02 18:23

AskZZang 조회 수:8348

01 기본 아키텍처

 

오라클 기본 아키텍처를 개념적으로 간단히 그려보면, 그림 1-2처럼 우리가 흔히 사용하는 워드프로세서와 매우 흡사하다.


그림1-2.jpg

 

 

워드프로세서를 통해 사용자가 입력하는 내용을 파일에 직접 I/O 한다면 수 메가바이트의 작은 파일을 편집하더라도 속도 때문에 큰 불편을 느끼게 된다. 당연히 메모리 캐시의 도움이 필요하다.

 

같은 원리로 오라클은 데이터베이스와 이를 액세스하는 프로세스 사이에 SGA라고 하는 메모리 캐시 영역을 두고 있다. (그림 1-3)

 

그림1-3.jpg


 

디스크를 경유한 입출력 : 물리적으로 액세스 암(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.jpg

 

그림 1-4는 오라클 인스턴스를 표현한 것인데, 그림에서 보듯 프로세스 집합을 다시 서버 프로세스와 백그라운드 프로세스 집합으로 나눌 수 있다.

 

서버 프로세스

l  오라클에 접속하면 각 클라이언트를 위한 전용 서버 프로세스가 떠서 사용자에게 필요한 서비스를 제공한다. (Shared Server로 구성하지 않았다면)

l  SQL을 파싱하고 필요하면 최적화를 수행

l  커서를 열어 SQL을 실행하면서 블록을 읽고

l  읽은 데이터를 정렬해서 클라이언트가 요청한 결과집합을 만들어 네트워크를 통해 전송

 

그림 1-5는 오라클에 접속할 때 내부적으로 어떤 과정을 거쳐 세션이 수립되는지를 보여준다.

 

그림1-5.jpg

 

주목할 점은, Listener에 연결요청을 하는 순간 하나의 프로세스를 띄우고 PGA 메모리를 할당한다는 사실이다. 이는 비용이 매우 큰 작업이므로 하나 또는 일련의 SQL문을 수행하기 위해 매번 연결요청을 한다면 결코 성능이 좋을 리 없다.

ð  오라클에 접속하는 애플리케이션을 구축할 때 반드시 Connection Pool 기능이 필요한 이유가 여기에 있다.

ð  한번 커넥션을 맺으면 작업을 완료하더라도 이를 해제하지 않고 애플리케이션 서버에 Pooling 하고 있다가 반복 재사용한다.

ð  소프트웨어 세계에서 가장 중요한 화두인 재사용성은 데이터베이스 성능튜닝의 핵심 원리이다.

 

그림1-6.jpg

 

RAC(Real Application Cluster)

l  하나의 데이터베이스를 액세스하는 다중 인스턴스로 구성

l  Shared Cache 방식을 지원 (Cache Fusion 기술)

l  Global Cache 개념을 사용하므로 Local Cache에 없는 데이터 블록을 이웃 노드에서 전송받아 서비스 할 수 있다.

l  다른 인스턴스에서 갱신하고 아직 커밋하지 않은 Active 상태의 블록까지도 디스크를 경유하지 않고 Dirty 버퍼 상태에서 네트워크를 통해 서로 주고 받으며 갱신을 수행

n  OPS 환경에서는 타노드에 캐싱된 Dirty 버퍼를 읽고자 할 때 디스크로의 쓰기 작업이 선행되어야만 했고, 이처럼 디스크를 거치는 동기화 과정을 Ping 이라고 불렀다.

 

그림1-7.jpg

 

 

SQL을 튜닝할 때 가장 많이 사용하는 툴킷은 뭐니뭐니해도 SQL Trace 라고 할 수 있다.

이중 query current 항목의 의미와 차이점을 정확히 이해하는가?

 

trace_tkprof.jpg

 

오라클 아키텍쳐를 설명하다 query current 항목에 대한 얘기를 끄집어 내는 이유는 이 항목들에 대해 설명하다 보면 자연스럽게 오라클만의 독특하고 핵심적인 아키텍처 대부분을 다루게 되기 때문이다.

 

Chapter 01. 오라클 아키텍처에서 오라클만의 독특한 읽기 일관성(Read Consistency) 모델을 이해하게 된다면 그것으로 성공이다!!