I. 전용 서버

  • 전용서버 모드는 이름에서 알 수 있듯이, 데이터베이스에 연결하는 각각의 사용자 프로세스에 전용 서버 프로세스를 할당하는 방식이다.
  • 이 방식은 오라클 데이터베이스를 설치할 때 기본으로 선택되는 방식이며, 대부분의 데이터베이스 운영자들이 이용하는 방식이다.
  • 전용 서버는 사용자 프로세와 서버 프로세스 간의 일대일 매핑을 이용하지만, 공유 서버는 다대일 관계를 이용한다.


II. 공유 서버

  • 공유 서버 모드에서는 발송자(dispatcher)라 불리는 부가적인 컴포넌트가 사용자 프로세스를 서버 프로세스로 안내하는 역할을 맡는다.
  • 사용자 프로세스가 공유 서버로의 접속을 요청하면, 오라클 넷 서비스는 세션 요청을 서버 프로세스가 아닌 발송자로 연결해준다.
  • 이어 발송자는 이 요청을 요청 대기열(Request Queue)로 보내며, 첫번째 Idle(휴식) 공유 서버가 대기열의 요청을 받아들인다.
  • 생성된 결과는 다시 응답 대기열(response Queue)로 보내지며, 발송자는 이를 모니터링하며 적절한 시점에 클라이언트로 리턴해준다.


III. 사용자 서버 vs 전용 서버 vs 공유 서버

1. 사용자 서버

  • 데이타베이스 응용프로그램과 Oracle 서버코드가 하나의 사용자 프로세스로 실행된다. 사용자가 서버에 직접 연결하는 방식
  • 데이타베이스 응용프로그램과 단일 프로세스상의 Oracle 코드를 분리하여 유지 관리할 수 있는운영체제(VAX, VMS)에만 적합하다.


2. 전용 서버

  • 사용자 프로세스가 한 컴퓨터에서 데이타베이스 응용프로그램을 실행하면 서버 프로세스는 관련된 Oracle 서버를 다른 컴퓨터에서 실행한다.
  • 이 구성은 사용자 프로세스와 서버 프로세스는 일대일 관계를 가진다.
  • 전용서버 구성에서 사용자와 서버 프로세스간의 통신 처리 방법.
    • 사용자 프로세스와 전용서버 프로세스가 동일한 컴퓨터에서 실행되도록 시스템이 구성되어 있다면 프로그램 인터페이스는 호스트 운영체제의 프로세스간 통신 처리 방법을 사용한다.
    • 사용자 프로세스와 전용서버 프로세스가 다른 컴퓨터에서 실행되면 프로그램 인터페이스는 네트워크 소프트웨어와 SQL*Net 같은 통신 처리 방법을 포함한다.


3. 공유 서버

  • 다중 스레드 서버 구성은 여러 사용자 프로세스가 매우 적은수의 서버 프로세스를 공유한다.
  • 여러 사용자 프로세스는 디스패처 프로세스에 접속된다.
  • 디스패처는 클라이언트 요구사항을 다음 사용 가능한 공유 서버 프로세스로 경로를 지정하다.
  • 다중스레드 서버 구성의 장점은 시스템 오버헤드가 감소하여 많은 사용자가 접근할 수 있다.


IV. 공유 서버에서 알아야 할 사항

1. 다중 스레드 서버 구조 개요

  • 다중 스레드 서버 구조를 사용하는 시스템에서 필요한 프로세스.
    • 사용자 프로세스를 디스패처나 전용 서버에 접속하는 네트워크 리스너 프로세스.
    • 하나 이상의 디스패처 프로세스.
    • 하나 이상의 공유 서버 프로세스.
  • 네트워크 리스너 프로세스는 접속 요청을 기다리고 각 사용자 프로세스가 공유 서버 프로세스를 사용할 수 있는지의 여부를 결정.
  • 사용할수 있다면 리스너는 사용자 프로세스에 디스패처 프로세스 주소를 준다.
  • 사용자 프로세스가 전용 서버 프로세스를 요구하면 리스너 프로세스는 전용 서버 프로세스를 생성하여 사용자 프로세스를 해당전용 서버 프로세스에 접속한다.
    • 공유서버를 사용하려면 사용자 프로세스와 Oracle인스턴스가 동일한 시스템에서 실행되더라도 사용자 프로세스는 SQL*Net을 통해 접속되야한다.
  • 디스패처가 SGA에 있는 요구 대기열에 요구사항을 보관하는데 여기서 다음 사용가능한 공유 서버 프로세스가 요구 사항을 선택한다.
  • 공유 서버 프로세스는 각 사용자 프로세스의 요구사항을 수행.
  • 공유 서버가 요구 사항을 완료하면 서버는 SGA에 접속된 사용자인 디스패처의 응답 대기열에 결과를 돌려 준다.
  • 디스패처는 사용자 프로세스에 완료된 요구 사항을 돌려준다.


2. 공유서버 프로세스

  • 특정 사용자 프로세스와 관련이 없고 전용 서버 프로세스와 동일한 기능을 제공한다.
  • 공유 서버 프로세스의 PGA는 사용자 관련 데이타를 포함하지 않는다.(PGA는 스택 영역과 프로세스별 변수만을 포함한다)
  • 모든 세션 관련 정보는 SGA에 포함되어 있다.
  • Oracle은 요구 대기열의 길이를 기준으로 공유 서버 프로세스 수를 동적으로 조정한다.
  • 생성되는 공유 서버 프로세스 수는 초기화 매개변수 MTS_SERVERS와 MTS_MAX_SERVERS사이의 범위를 가진다.


3 디스패처 요구 및 응답 대기열

  • 요구 대기열은 SGA에 있으며 인스턴스의 모든 디스패처 프로세스에 공통적이다.
  • 공유서버 프로세스는 FIFO방식으로 새로운 요구 사항을 선택한다.
  • 하나의 공유서버 프로세스는 대기열에서 하나의 요구 사항을 선택하여 이 요구사항을 완료하여 호출한 디스패처의 응답 대기열에 보관한다.
  • 각 디스패처는 SGA에 자신의 응답 대기열을 가지고 있으며, 완료된 요구사항을 적합한 사용자 프로세스에 전송한다.


4. Artificial 교착상태

  • 공유 서버 프로세스 수의 제한 때문에 "artificial"교착상태가 발생할 가능성이 있다.
    • 한 사용자가 SELECT 명령문에 FOR UPDATE 절을 실행하거나 LOCK TABLE 명령문을 실행하여 자원에 대한 배타적인 잠금을 획득한다
    • 명령문 처리가 완료되면 잠금 요구를 처리하는데 사용된 공유 서버프로세스가 해제된다.
    • 다른 사용자가 잠긴 자원을 액세스하려고 한다. 각 공유 서버 프로세스는 필요한 잠긴 자원을 사용할 수 있을 때까지 자신이 처리하는 사용자 프로세스에 묶인다. 결국 모든 공유 서버는 잠긴 자원을 기다리는 사용자에게 묶인다.
    • 원래 사용자가 이전에 획득한 잠금을 해제하기 위해 새로운 요구사항(COMMIT이나 ROLLBACK명령문)을 보내려고 하지만 모든 공유 서버 프로세스가 이미 사용 중이므로 새로운 요구 사항을 보낼수 없다.
  • 교착상태를 해결하기 위해 새로운 공유 서버 프로세스가 자동으로 생성된다
  • 매개변수 MTS_MAX_SERVERS(최대로 생성되는 공유 서버 프로세스의 수)에 지정된 대로 공유 서버 프로세스가 실행되고 있다면 데이타베이스 관리자가 사용자 접속을 해제하여 교착상태를 수동으로 해결


5. 다중스레드 서버의 제한된 작동

  • 인스턴스 종료, 시작, 매체 복구를 포함한 특정관리 작업은 디스패쳐 프로세스에 접속된 상태에서 수행될수 없다.
  • 이런 작업은 일반적으로 INTERNAL로 접속된 경우에 만 수행할 수 있다.
  • 다중 스레드 서버로 구성된 시스템에서 INTERNAL로 접속하려면 디스패처 프로세스 대신 전용 서버 프로세스를 사용하고자 한다는 내용을 기술해야 한다.