메뉴 건너뛰기

bysql.net

1._기본_아키텍처

2012.03.02 18:23

AskZZang 조회 수:8338

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) 모델을 이해하게 된다면 그것으로 성공이다!!

 

 

번호 제목 글쓴이 날짜 조회 수
6 5._Undo dasini 2012.03.11 25062
5 2._DB_버퍼_캐시 file 시와처 2012.03.04 10418
» 1._기본_아키텍처 file AskZZang 2012.03.02 8338
3 1_장._오라클_아키텍처 AskZZang 2012.03.02 4977
2 3._버퍼_Lock 박영창 2012.02.24 7226
1 Front Page file 운영자 2012.02.21 131194