본문 바로가기
ORACLE/ADMIN

[Oracle] Dedicated Server와 Shared Server 차이

by 🌻♚ 2020. 7. 12.

Dedicated Server와 Shared Server 서버방식 설정

사용자는 Database에 질의하고 Database는 해당 질의에 결과를 반환해줍니다. 이러한 과정에서 내부적으로 결과값까지 반환해주는데 설정 가능한 서버방식이 두가지가 있습니다. 각 사용자 별로 프로세스를 전담마크해주는 Dedicated Server 방식미리 프로세스를 기동시켜 들어오는 요청들을 순차적으로 처리하는 Shared Process가 있습니다.

 

 

Dedicated Server

Database에 별다른 설정을 하지 않는 다면 Dedicated Server 방식으로 설정됩니다. 그림에서 처럼 각 유저 프로세스에게 1 대 1로 전담마크해주는 서버 프로세스가 생성됩니다. 사용자로부터 연결 요청을 했을 때 Server Process를 생성시켜 Connection을 만들어 줍니다.

 

장점

- 명령 처리가 빠르다.

 

단점

- 놀고 있는 프로세스가 생겨 resource 낭비가 발생한다. --> 유저 프로세스가 데이터베이스에 접속하여 아무 작업을 하지 않으면 서버 프로세스는 실행되어 있지만 아무것도 하고 있지 않는다.

 

 

Shared Server

Shared Server는 은행에 가면 미리 은행원들이 자리에서 대기하고 번호표를 뽑은 고객들이 순서대로 은행창구에서 업무를 보는 것과 유사합니다. 미리 Server Process와 Dispatcher Process를 기동시켜 놓고 User Process가 연결 요청을 했을때 Listener가 받아서 Dipatcher에게 보내줍니다. 그러면 요청이 들어왔을 때 Dispatcher가 받아서 SGA 메모리에 Request Queue안에 요청 순서대로 넣습니다.

 

Request Queue안에 작업이 있는 것을 확인하고 미리 기동되어 있던 Server Process들은 순서대로 일을 받아서 처리합니다. 이렇게 진행되면 Dedicated Server와는 다르게 놀고 있는 Server Process의 수는 줄어들 것이고 resource에 대한 낭비를 줄일 수 있습니다.

 

Server Process에서 작업이 완료되어 결과값을 User Process에게 반환할때는 Response Queue를 사용합니다. 1개 밖에 없는 Request Queue와는 다르게 Response Queue는 각 Dispatcher마다 있습니다. Dispatcher는 Response Queue에 들어온 결과를 User Process에게 보내줍니다.

 

장점

- resource의 낭비를 줄일 수 있습니다.

 

단점

- sql문장을 처리하는데 비교적 느립니다.

 

작업 처리에 대한 시간이 조금 더 걸리더라도 Resource에 대한 낭비를 줄이느 것이 효율적이기 때문에 상황에 맞게 Shared Server를 사용할수 있습니다. 서버방식은 병행해서 사용할 수 있습니다. Shared Server 방식으로 설정되어 있더라도 데이터베이스와의 연결 방식을 미리설정하여 빠른 처리가 필요한 특정 작업은 Dedicated Server 방식으로 연결이 가능합니다.

 

 

Dedicated Server, Shared Server 실습

실습환경

OS : Red Hat Enterprise Linux Server release 6.10
DB : Oracle 11.2.0.1
SID: orcl
hostname : 601d2fce71dc

listener.ora 파일의 설정은 아래와 같고 리스너의 동적 등록을 위해 local_listener parameter의 값도 "" Default 상태로 실습 진행합니다.

 

$ORACLE_HOME/network/admin/listener.ora

LISTENER =
 (DESCRIPTION_LIST =
  (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 601d2fce71dc)(PORT = 1521))
  )
 )

 

Dedicated Server 실습

Dedicate Server는 기본값으로 사실 별다른 실습이 없습니다. tnsnames.ora파일에 연결 방식을 설정하고 Dedicated Server로 들어갔는지 확인하는 실습을 해보겠습니다.

 

$ORACLE_HOME/network/admin/tnsnames.ora

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 601d2fce71dc)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )


ORCL_D =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 601d2fce71dc)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

 

[oracle@601d2fce71dc ~]$ sqlplus system/oracle@orcl

 

SYSTEM@orcl> 
select 
	server
	,service_name 
from v$session 
where username = 'SYSTEM';

 

새롭게 세션을 열고 접속을 시도해본다.

[oracle@601d2fce71dc ~]$ sqlplus system/oracle@orcl_d
SYSTEM@orcl_d> 
select 
	server
	,service_name 
from v$session 
where username = 'SYSTEM';

유저 프로세스마다 1대1로 서버 프로세스가 생성되는 것을 확인할 수 있습니다.

 

 

Shared Server 실습

목표
- Shared server process 개수는 초기 2개, 최대 10개 생성한다.
- dispatcher 개수는 초기 1개, 최대 3개 생성한다.
- 400개 세션을 동시에 열 수 있고, 그 중 5개는 dedicated session이 열리도록 설정한다.

 

[oracle@601d2fce71dc ~]$ sqlplus system/oracle
SYSTEM@orcl> show parameter shared_server

 

SYSTEM@orcl> alter system set shared_servers = 2;

shared server process의 초기 갯수 를 2개로 지정합니다.

 

SYSTEM@orcl> alter system set max_shared_servers = 10;

shared server process의 최대 갯수를 10개로 지정합니다.

 

SYSTEM@orcl> show parameter shared_server

 

SYSTEM@orcl> show parameter dispatcher

 

SYSTEM@orcl> alter system set dispatchers='(PROTOCOL=TCP)(dispatchers=1)';

dispatcher의 초기 갯수를 1로 지정합니다.

 

SYSTEM@orcl> alter system set max_dispatchers = 10;

dispatcher의 최대 갯수를 10으로 지정합니다.

 

SYSTEM@orcl> show parameter dispatcher

 

SYSTEM@orcl> alter system set sessions=400 scope=spfile;

400개의 session을 동시에 열수 있도록 설정합니다.

 

SYSTEM@orcl> alter system set shared_server_sessions=395;

그 중에서 5개는 dedicated server로 열수 있도록 지정합니다. 전체 400개의 session 중에 395개의 세션을 shared server로 지정하여 설정 가능합니다.

 

SYSTEM@orcl> conn / as sysdba
Connected.
SYS@orcl> shutdown immediate;
SYS@orcl> startup;

정적 파라미터를 변경했으니 재실행해줍니다.

 

SYS@orcl> show parameter sessions

목표에 대한 변경을 완료했으니 확인작업을 해보겠습니다.

 

[oracle@601d2fce71dc ~]$ ps -ef | grep ora_[ds]0

d00... : dispatcher

s00... : server process

OS단에서 올라와 있는 프로세스를 확인하는 작업을 해봤습니다. 연결된 세션이 없는데도 불구하고 설정대로 초기에 1개의 dispatcher와 2개의 server process가 띄워져 있는 것을 확인할 수 있습니다. 이제는 직접 연결작업을 통해 확인해보겠습니다.

 

 

tnsnames.ora 변경

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 601d2fce71dc)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )


ORCL_D =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 601d2fce71dc)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )


ORCL_S =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 601d2fce71dc)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = orcl)
    )
  )

ORCL_S라는 연결 별칭으로 SHARED 방식의 접속을 설정했습니다.

 

[oracle@601d2fce71dc ~]$ sqlplus system/oracle@orcl_s

 

SYSTEM@orcl_s> 
select 
	server
	,service_name 
from v$session 
where username = 'SYSTEM';

Shared Server 방식으로 접속한것을 확인할 수 있습니다.

 

세션을 하나 더 만들어 똑같이 Shared 방식으로 접속해보겠습니다.

[oracle@601d2fce71dc ~]$ sqlplus system/oracle@orcl_s
SYSTEM@orcl_s> 
select 
	server
	,service_name 
from v$session 
where username = 'SYSTEM';

2개의 Shared Server로 접속했을 때 하나는 NONE으로 표기됩니다. Shared Server의 경우 작업하고 있을 때만 Shared로 표시가 됩니다. 다른 세션에서는 작업을 하고 있지 않아 NONE으로 표기 되었습니다.

 

Dispatcher 확인

SYSTEM@orcl_s> select name, status from v$dispatcher;

 

Shared Server 확인

SYSTEM@orcl_s> select name, status from v$shared_server;

Shared Server process들의 상태를 확인할 수 있습니다. 현재 Shared Server로 하나의 세션에 접속하여 EXEC 상태로 표시되었고 나머지 프로세스는 WAIT로 표기 되었습니다.

 

댓글0