본문 바로가기

Oracle/admin

Shared Server 구성

1. Shared Server 구성 절차
 

1) server 측

SQL> alter system set dispatchers="(protocol=TCP)(dispatchers=2)";

System altered.

SQL> alter system set max_dispatchers=4;

System altered.

SQL> show parameter dispatch

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------------
dispatchers                          string      (protocol=TCP)(dispatchers=2)
max_dispatchers                      integer     4

SQL> alter system set shared_servers=2;
System altered.
SQL> alter system set max_shared_servers=4;
System altered.
SQL> show parameter shared_server
NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------------
max_shared_servers                   integer     4
shared_server_sessions               integer
shared_servers                       integer     2
SQL> !lsnrctl stop
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 26-MAR-2010 19:55:46
Copyright (c) 1991, 2007, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
The command completed successfully
SQL> !lsnrctl start
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 26-MAR-2010 19:55:55
Copyright (c) 1991, 2007, Oracle.  All rights reserved.
Starting /oracle/product/102/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 10.2.0.4.0 - Production
System parameter file is /oracle/product/102/db_1/network/admin/listener.ora
Log messages written to /oracle/product/102/db_1/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.4.0 - Production
Start Date                26-MAR-2010 19:55:55
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/product/102/db_1/network/admin/listener.ora
Listener Log File         /oracle/product/102/db_1/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
 
2) Client 측 tnsnames.ora 설정
shhhwang =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.49.128)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
   * (CONNECT_DATA = (SERVICE_NAME = DB10)(SERVER=DEDICATED)  로 설정하면 dedicated server 환경에 접속

위와같이 서비스를 하나더 추가해주고 추가하기전 기존에 서비스로 접속하면
Dedicated server로 접속하고 새로 추가한 서비스로 접속하면  Shared server로 접속할수 있다.

Shared server로 접속하고자하는 클라이언트쪽에서 tnsnames.ora에 해당 서비스를 추가해주어야함.(위와같이)
그게 로칼이든 아니든 새로운 서비스명으로 지정을 해줘야 한다.



 
3) Test
Dedicated server로 sys로 접속
$>sqlplus "/as sysdba"

SQL> select sid, username, type,server
         from v$session
         where username in ( 'SYS')




Shared server로 scott으로 접속
$>sqlplus scott/tiger@shhhwang

SQL> select sid, username, type,server
         from v$session
         where username in ( 'SYS','SCOTT')



Shared server로 scott으로 sysdba권한으로 접속
$>sqlplus scott/tiger@shhhwang as sysdba

SQL> select sid, username, type,server
         from v$session
         where username in ( 'SYS','SCOTT')




일반적으로 배치작업같은 경우는 Dedicated server에서 작업하는것이 효율적이며
자원의 소비량이 작은경우는 Shared server를 사용하는것이 효과적이라고 한다. 

Dedicated server process
▷ 사용자 프로세스와 서버 프로세스가 구분됨
▷ 각 사용자 프로세스는 각각의 서버프로세스를 가짐
▷ 사용자 프로세스와 서버 프로세스를 각각 다른 시스템에서 실행하여 분산처리 
    가능
▷ 사용자 프로세스와 서버 프로세스의 비율은  1:1 이다.
▷ 사용자 프로세스가 요청을 하지 않는경우에도 dedicated server는 존재하지만
     idle 상태임



 

Shared server process
▷ 사용자가 단순히 입력하는 작업을 하는 환경에 적합하다.
    (서버프로세스가 유저프로세스와의 연결 시간중 90%이상 아무런 작업이
     없는경우)
▷ 사용자의 요청을 어떠한 서버 프로세스라도 처리가 가능하므로 서버 프로세스
    의 효율성이 향상됨
▷ 서버 프로세스를 공유함으로써 전용 서버환경에서 접속 할수 있는 사용자의 수
    보다 많은 수의 사용자 접속을 처리 할수 있다.
▷ 클라이언트의 user process는 dispatcher에 연결된다.
▷ pmon 프로세스는 listner에 dispatcher의 위치와 부하 상태를 등록하여 listner
    가 클라이언트의 요청을 가장 부하가 적은 dispatcher로 전달 할수 있도록 
    해준다.
▷ dispatcher는 동시에 여러 클라이언트와 연결될 수 있다.
▷ 각 클라이언트 연결은 virtual circuit에 의해 제한된다.
virtual circuit : 클라이언트의 DB연결 요청 및 응답을 위해 dispatcher에 의해 사용되
는 공유 메모리의 일부분
▷ dispatcher는 클라이언트의 요청시 virtual circuit을 공용 queue에 위치 시키고
    shared server process는 공용 queue에서 virtual circuit을 가져와 요청을
    처리한 뒤 공용 queue에서 다른 virtual circuit을 가져오기 전에 해당
    virtual circuit을 해제
▷ 장점은 클라이언트의 요청을 처리하는데 필요한 server process의 개수를 감소
    시킬수 있기 때문에 서버의 메모리 사용량을 줄일수 있다.
 ex)dedicated server는 100명의 사용자가 있으면 100개의 dedicated server process 가 필요하지만 shared는 10개의 shared server process면 충분하기 때문에 서버의 시스템 자원을 효율적으로 사용 할수 있다.


 

######클라이언트 요청 처리 과정######
1. 유저프로세스가 지정된 dispatcher에게 요청을 전달한다.
    (세션 내에서 여러개의 유저프로세스는 동일한 dispatcher에 연결 가능함)
2. dispatcher는 유저프로세스의 요청을 SGA의 request queue에 위치시킨다.
   (모든 dispatcher는 하나의 request queue를 공유하며 항상 새로운 요청이
   있는지 감시한다. FIFO방식으로 처리된다.)
3. Shared server process는 request queue로부터 유저프로세스의 요청을 가져
   와서 처리하고 처리결과를 dispatcher의 response queue에 위치한다.
    (각각의 dispatcher는 SGA에서 자기 소유의 response queue를 갖는다.)
4. dispatcher는 처리결과를 유저프로세스에게 돌려준다.
5. 유저프로세스의 요청이 완료되면 Shared server process는 request queue에
   서 다른 유저프로세스의 요청을 가져다 처리함


 

alter system set dispatchers="(protocol=tcp)(dispatchers=3)";
dispatcher는 명령을 통해 추가로 가동하거나 줄일수도 있지만
줄이는 경우에는 database를 재시작 해주어야 한다.

alter system set shared_server=2;
 
Shared server process 개수를 2개로 변경
만약 0으로 한다면 임시적으로 shared server환경을 비활성화 시키는 것임

#shared server 환경 관련 정보
v$circuit : virtual circuit에 관련된 정보,dispatcher를 통한 사용자의 연결을
                     보여줌
ex) select dispatcher,circuit,server,status from v$circuit;

▶ v$shared_server : shared server process에 관한 정보를 검색
ex) select name,status,idle,busyrequests from v$shared_server;

v$dispatcher : dispatcher process에 관한 정보를 검색
ex) select name,network,status from v$dispatcher;

v$shared_server_monitor : shared server process의 튜닝 관련 정보를
                                                검색
v$queue : request,response queue에 대한 정보 검색
ex) select * from v$queue;

v$session : 현재 접속 세션에 대한 정보 검색
ex) select username,sid,serial# from v$session;

'Oracle > admin' 카테고리의 다른 글

TEMP 테이블스페이스 생성 및 삭제  (0) 2015.09.14
ROLLBACK SEGMENT  (0) 2015.09.14
특정 session kill  (0) 2015.09.14
유용한 dictionary  (0) 2015.09.14
How to Recover from delete on a table using 10g logminer (by example)?  (0) 2015.09.14