본문 바로가기

# 미사용

오라클 기본 아키텍쳐

오라클 기본 구성요소

DBMS란 기본적으로 사용자의 SQL을 해석하여, 원하는 데이터를 추출/삽입/수정하는 프로그램이다. 

위의 기능을 위해 오라클 서버는 3가지의 기본 구성요소로 구성된다.

  • Server Processes 

User Process 에게 전달받은 SQL을 해석하는 프로세스.

해석된 SQL을 바탕으로 실제 작업을 실행하고, 그 결과를 User 에게 전송한다.

  • Memory Aera

파일에서 읽어온 데이터가 캐시되어 있는 공간.

모든 데이터는 일단 Memory에 캐시되어야 클라이언트에게 전송될 수 있다. (일부 예외있음)

  • Background Processes

오라클이 정상적으로 운영될 수 있도록 돕는 프로세스.

각종 장애의 감시와 복구 등을 담당한다.




Server Processes

유저 프로세스가 서버(Listener)에게 연결을 요청하면, 

서버(Listener)는 새롭게 서버 프로세스를 생성하여 매칭시켜주는데,

매칭이 완료되고 나서야, 클라이언트는 서버에게 SQL을 전송할 수 있다.


Note.

Connection Pooling


Server Process를 새롭게 생성하는 작업은 굉장히 비싸다.

모처럼 만든 서버 프로세스를 한 번만 쓰고 버리는 것은 굉장히 미련한 행동이기 때문에,

이전에 생성된 프로세스를 Connection Pool 이라는 공간에 저장해두고 계속해서 재활용하는 방식을 사용한다. 


오라클은 DB 수준에서 이를 기본적으로 지원해주지만,

이를 사용하지 않아도 소프트웨어 수준에서 충분히 구현할 수 있다.

데이터베이스의 성능을 극대화시키는 것은 "재사용"에 있음을 기억하자.



매 연결요청 마다, 새롭게 서버 프로세스를 생성하여 매칭시켜주는 방식을 

전용 서버방식(Dedicated Server Configuration) 이라 하며,



미리 생성된 서버 프로세스를 재활용하는 방식을 

공유 서버방식(Shared Server Configuration)이라고 한다.


이 때, 클라이언트가 요청한 SQL 구문은 SGA 영역의 Request Queue에 저장되며,

여유로운 서버 프로세스가 Request Queue에서 꺼내어 실행한다.

SGA 영역은 Memory 영역 절에서 설명한다.




이렇게 매칭된 서버 프로세스는 

1. 사용자에게서 SQL을 전달받고,

2. 좀 더 효율적인 형태로 쿼리를 재작성하며,

3. 실제 커서를 열어 SQL을 수행한 뒤,

4. 해당 결과를 다시 User Process에게 알려주는 일련의 작업을 담당하는데,


만약 도중에 자신의 범위를 넘어나는 작업을 만나면, 

OS / IO System / Background Process 등에게 신호를 보내,

해당 작업을 대신 처리하도록 요청한다.


위의 경우에 해당하는 대표적인 작업은 아래와 같다.

1. DML 수행에 필요한 데이터가 메모리에 캐시되어 있지 않아, 디스크에서 찾아야 할 때.

2. Memory가 꽉차, 새로운 데이터를 캐시할 수 없을 때.

3. etc ...


Memory Area

오라클에서 사용되는 메모리는 할당 영역에 따라 다음과 같이 분류할 수 있다.

  • SGA (System Global Area)

서버에서 생성된 모든 프로세스가 전역으로 사용하는 메모리 영역.

캐시된 데이터, 각종 오브젝트 정보, Request Queue 등이 저장되어 있다.

  • PGA (Process Global Area)

서버 프로세스에 생성되는 메모리 영역.

SQL 실행에 필요한 정보(SQL커서 및 실행계획 오브젝트 등)이 저장되어 있다.

  • UGA (User Global Area)

User를 위한 메모리 영역이지만, 이름과 달리 User Process 영역에 할당되지 않는다.

전용 서버 방식에서는 세션과 서버 프로세스와 1:1 대응이 되므로 PGA 영역에 할당되지만,

공유 서버 방식에서는 세션이 서버 프로세스보다 많을 수 있으므로 SGA 영역에 할당된다.


좀 더 구체적으로 설명하자면, 어떤 설정값에 의하여 SGA의 각기 다른 영역에 할당될 수 있는데,

이것은 관련 내용을 설명할 때 구체적으로 설명할것이므로,

지금 상태에서는 이 정도까지만 알아도 무방하다.



Background Processes

백그라운드 프로세스는 오라클이 정상적으로 운용될 수 있도록 돕고,

서버 프로세스가 수행하지 못하는 작업을 담당한다.


아래는 대표적인 Background Process이다.


구체적인 내용은 최대한 제거했으며, 

자세하게 알고 싶다면 오라클 문서를 참조하기 바란다.

  • SMON (System Monitor)

오라클 인스턴스가 정상적으로 작동하는지 감시하는 프로세스.

인스턴스 Fail 시 복구를 담당하고, 

사용되지 못하는 각종 영역을 모아서 집약한 뒤, 다시 재사용 가능하게 만든다. 

  • PMON (Process Monitor)

오라클에서 사용되는 모든 프로세스가 정상적으로 작동하는지 감시하는 프로세스.

비정상적으로 종료된 세션을 정리하고 SGA 영역을 재사용할 수 있도록 하며, 

커밋되지 않은 트랜잭션을 롤백시킨다.

  • DBWn (Database Writer)

Memory 영역(SGA, DB Buffer Cache)이 꽉 차 더 이상 캐시할 수 없을 때,

필요없는 캐시 영역을 파일에 저장하고 삭제시켜 여유공간을 만드는 프로세스.

  • LGWR (Log Writer)

Memory 영역(SGA, DB Buffer Cache)에 일어난 모든 변경사항을 기록하는 프로세스.

해당 로그는 롤백이나 복구에 사용된다.

  • CKPT (Checkpoint)

SGA 내 모든 버퍼에 발생된 모든 변경사항을 파일에 저장하는 프로세스.

이 프로세스의 활동으로 DBWn과 LGWR이 호출된다.

CKPT에 기록되었다면 해당 시점까지의 무결성을 보장할 수 있다. (복구에 사용)

  • RECO (Recover)

네트워크 장애로 인한 트랜잭션 실패를 복구하는 프로세스.

  • ARCn (Archiver)

Redo 로그가 꽉 찼을 때, 파일로 저장하는 프로세스.

'# 미사용' 카테고리의 다른 글

오라클 Buffer Lock  (0) 2018.05.19
오라클 DB Buffer Cache  (0) 2018.05.17
알고리즘 개요  (0) 2018.05.04
[4-4-2]: 물리 요소 조사 및 분석  (0) 2018.03.23
[4-4-1]: 물리 데이터 모델링 이해  (0) 2018.03.23