오라클 프로세스

  • 오라클에서 각 프로세스는 하나 이상의 특정 작업을 수행하고 작업 수행에 필요한 내부 메모리를 할당받는다. 오라클 인스턴스는 크게 3부분으로 나뉠 수 있다.
  • 서버 프로세스 : 클라이언트 요청을 기반으로 작업을 수행하는 프로세스
  • 백그라운드 프로세스 : 데이터베이스를 유지하기 위한 다양한 작업을 수행하는 프로세스
  • 슬레이브 프로세스 : 백그라운드 또는 서버 프로세스를 대신하여 추가 작업을 하는 프로세스


서버 프로세스

  • 클라이언트 세션을 대신하여 일을 수행하는 프로세스
  • 클라이언트 세션에서 데이터베이스로 보내는 SQL문을 받아서 처리하는 프로세스


커넥션 유형에 따른 구분
  • Dedicate Mode : 서버에서 클라이언트 커넥션별로 dedicated server가 존재하는데, 데이터베이스에 대한 커넥션과 서버 프로세스는 일대일 매핑 관계를 가진다.
  • Shared Mode : 오라클 인스턴스는 많은 세션이 함께 공유할 수 있는 서버 프로세스 풀을 관리한다. 클라이언트 커넥션은 dedicated server 대신 서버 프로세스 풀에 있는 서버 프로세스와 중개 역할을 담당하는 데이터베이스 dispatcher로 작업을 요청한다.


  • 커넥션 : 클라이언트 프로세스와 오라클 인스턴스 간의 물리적 경로일 뿐
  • 세션 : 클라이언트 프로세스가 SQL을 실행할 수 있는 데이터 베이스에 존재하는 논리적인 객체
  • 다수의 독립적인 세션이 단 한 개의 커넥션과 관련을 가질 수도 있고, 커넥션으로 부터 독립적으로 존재할 수도 있다.


Dedicated Server 커넥션

  • 클라이언트 커넥션과 서버 프로세스 간에 일대일 맵핑 관계가 성립한다.

장점
  • 원격 실행 : 클라이언트 애플리케이션이 데이터베이스 서버와 다른 장비에서 실행하는 것은 당연하다.
  • 주소 공간 고립: 서버 프로세스는 SGA에 읽기/쓰기 권한을 갖고 있다. 클라이언트 프로세스와 서버 프로세스가 물리적으로 함께 링크되어 있다면, 클라이언트 프로세스의 잘못된 포인터가 SGA 에 있는 자료 구조를 쉽게 망가뜨릴 수 있다.


V$PROCESS의 SPID : 프로세스의 운영체제 PID

SQL> select a.spid dedicated_server, b.process clientpid
  2  from v$process a, v$session b
  3  where a.addr = b.paddr
  4  and b.sid = (select sid from v$mystat where rownum = 1)
  5  ;

DEDICATED_SERVER         CLIENTPID
------------------------ ------------------------
31857                    31854

SQL> ! ps -ef | grep 31857
oracle    8245 31854  0 10:12 pts/0    00:00:00 /bin/bash -c  ps -ef | grep 31857
oracle    8247  8245  0 10:12 pts/0    00:00:00 grep 31857
oracle   31857 31854  0 09:46 ?        00:00:00 oracleASMDB2 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

SQL>



Shared Server 커넥션

  • 클라이언트와 서버가 동일한 장비에 있더라도 Oracle Net을 강제로 사용하여 오라클 TNS 리스너에 연결한 다음, dispatcher로 방향을 바꾸고 요청을 넘겨준다.
  • dispachter는 클라이언트 애플리케이션과 shared server 프로세스 간의 파이프처럼 작동하여 동작한다.
  • dispatcher는 1개 이상 생성 가능하다.
  • dispatcher는 단순히 클라이언트 애플리케이션이 보낸 요청을 받아서 SGA의 요청 큐에 넣는 역할을 수행한다.



데이터베이스 상주 커넥션 풀링(DRCP)

  • 자체적으로 커넥션 풀링을 지원하지 않는 애플리케이션 인터페이스를 위해 설계된 방법
  • dedicated server와 shared server 를 섞어 놓은 개념
  • 풀에서 선택된 dedicated server 프로세스는 세션이 살아있는 동안에는 클라이언트 프로세스와 일대일 매핑된다.
  • shared server의 풀링 기능과 dedicated server의 성능을 갖고 있다.


커넥션 대 세션

커넥션
  • 단순히 클라이언트 프로세스와 데이터베이스 인스턴스 간의 물리적인 경로
  • 즉, 네트워크 커넥션이다.
  • 커넥션은 dedicated server 프로세스로 갈 수도 있고, dispatcher로 갈수도 있다.
  • 오라클 커넥션 매니져를 사용하면 커넥션은 클라이언트와 CMAN 사이 또는 CMAN과 데이터베이스 사이의 연결일수도 있다.


세션
  • 인스턴스에 존재하는 논리적인 개체
  • 세션의 상태와 사용자의 세션을 유일하게 표현하는 메모리 상에 존재하는 자료구조의 묶음
  • 사용자는 서버에 존재하는 세션에서 SQL을 실행하고 트랜잭션을 커밋하고, 저장 프로시져를 실행한다.


Dedicated Server 대 Shared Server 대 DRCP

Dedicated Server를 사용할 때
  • Dedicated Server 모드에서 클라이언트 커넥션과 서버 프로세스는 일대일 관계이다.
  • 오라클에서 추천하는 구성이며 확장도 용이하다.
  • 충분한 리소스가 있다면 수천개의 커넥션을 맺는 것도 가능하다.
  • 데이터 베이스를 시작하고 종료하는 특정 작업은 반드시 이 모드로 처리되어야 한다.


Shared Server를 사용할 때
  • 이 모드에서는 다대일 관계가 존재한다.
  • shared server 모드는 자원을 공유하며 사용하는 모드이다. --> 특정 작업이 리소스를 독접하지 않도록 조심해야 한다.
  • shared server 모드에서는 트랜잭션의 동작 시간이 길면 리소스 독점 시간이 길어지기 때문에 사용해서는 안된다. 즉, 트랜잭션의 실행 시간이 짧은 것으로만 구성된 서비스에서 사용가능한 모드이다.
  • 인위적인 데드락 상태 : 세션을 모두 점유하고 사용하고 있는 경우, 커밋을 시도하려는 커넥션이 세션을 잡지 못해 커밋을 하지 못하고, 세션을 점유하는 작업 중 커밋을 시도하려는 트랜잭션의 작업의 완료만을 기다리며 대기하고 있는 세션이 있는 경우 발생하는 상태
  • shared server 모드는 기본적으로 1분 이상 걸리는 쿼리에는 치명적이다.


참고
  • 어플리케이션 단에서 이미 커넥션 풀링 기능을 사용하고 있고, 커넥션 풀의 크기를 적절하게 조절해서 사용하고 있따면, shared server 모드를 사용하는 것은 단지 성능을 저하시키는 요인이 된다.


Shared Server의 잠재적인 이점
  • 운영 체제 프로세스/스레드 갯수 줄이기
  • 인위적으로 동시성 정도 제한하기
  • 시스템에 필요한 메모리량을 감소시킨다.


DRCP
  • Oracle 11g의 새로운 기능이다.
  • shared server mode의 장점을 제공한다.
  • 인위적인 데드락이 발생하지 않는다.
  • 클라이언트 프로세스가 풀에서 dedicated server를 갖게 되면, 클라이언트 프로세스가 dedicated server를 해제할 때까지 dedicated server를 소요하는 방식으로 구성된다.
  • 자주 커넥션을 연결해서 상대적으로 작은 처리를 하고, 커넥션을 끊는 일을 반복적으로 수행하는 어플리케이션단에서 효과적이다.