Processes of the multi-threaded server
작성자 관리자 작성시간 2004-02-25 13:57:37
 

☞Reducing Contention for Dispatcher Processes 
●  dispatcher process에 대한 contention을 정의하는 방법
●  dispatcher process를 추가하는 방법



♣ Identifying Contention for Dispatcher Processes
▶  dispatcher processes에 대한 contention은 아래의 징후에 의해서 알게된다.
· dispatcher의 높은 사용율
· dispatcher가 응답큐(Response Queue)의 회답을 기다리는 시간의 계속적인 증가.

●  Examing Busy Rates for Dispatcher Processes
▶  Dispatcher process의 행동에 대한 statistics는 동적 performance table V$DISPATCHER에 나타난다.
▶  이 테이블은 SYS 유저와 SYSTEM와 같은 SELECT ANY TABLE 시스템 권한을 가진 다른 유저들만이 사용할 수 있다.
· IDLE : 이 칼럼은 dispatcher process를 위한 idle time을 백분의 몇초로서 보여준다.
· BUSY : 이 칼럼은 dispatcher process를 위한 busy time을 백분의 몇초로서 보여준다.
·SELECT network "Protocol", SUM(busy) / ( SUM(busy) + SUM(idle) ) "Total Busy Rate"
              FROM v$dispatcher
              GROUP BY network;
▶  이 질의는 각 프로토콜의 dispatcher process를 위한 총 busy rate를 반환
▶  결과는
Protocol Total Busy Rate
------------------  -------------------------- 
DECnet  .004589828 
TCP  .029111042 
▶  이 결과로부터 아래와 같은 몇개의 견해를 만들 수 있다.
· DECnet dispatcher process는 거의 시간당 0.5%씩 바쁘다.
· TCP dispatcher process는 거의 시간당 3%씩 바쁘다.
▶  만약 특별한 프로토콜의 dispathcher process가 시간당 50%이상씩 바쁘게 되면, dispatcher process를 증가시킴으로서 성능향상에 좋을 수 있다.
●  Examining Wait Times for Dispatcher Process Response Queues
▶  Dispatcher process를 위한 응답 큐의 행동을 반영하는 statistics는 동적인 performance table인 V$QUEUE에 쓰여진다.
▶  SYS 유저와 SYSTEM와 같은 SELECT ANY TABLE 시스템 권한을 가진 다른 유저들만이 사용
▶  이 칼럼은 큐에 응답을 위한 wait time을 보여준다.
·WAIT : 이 칼럼은 큐에 존재하는 모든 응답들을 위한 총 wait time을 백분의 몇초로서 보여준다.
·TOTALQ이 칼럼은 큐에 존재한 적이 있는 응답의 총 수를 보여준다.
·SELECT network "Protocol",
              DECODE( SUM(totalq), 0 ,'NO RESPONSES',
              SUM(wait)/SUM(totalq) || 'hundredths of seconds ')
              "Average Wait Time per Response"
              FROM v$queue q, v$dispatcher d
              WHERE q.type = 'DISPATCHER' AND q.paddr = d.paddr GROUP BY network ;

▶  이 질의는 백분의 일초 당 각 dispatcher process에 있는 응답 큐에서 user process에 응답을 전달하기 위해 하나의 응답이 기다리는 평균시간을 반환한다.
▶  이 질의는 network protocol에 의해 V$QUEUE 테이블의 행들을 그룹화한 V$DISPATCHER 테이블을 사용한다.
▶  이 질의는 또한 큐에 어떠한 응답도 없을 경우를 위해서 프로토콜을 알아볼수 있는 DECODE syntax를 사용한다.
▶  결과는
Protocol Average Wait Time per Response
------------------  -------------------------- 
DECnet  .1739130 hundredths of seconds 
TCP  No Response 
▶  이 결과로부터, 큐에 있는 하나의 응답은 DECnet dispatcher process에서는 평균적으로 천분의 0.17초 만큼 기다리고, TCP dispatcher process에서는 queue에 어떤 응답도 가지지 않는다는 것을 알수 있다.
▶  특별한 네트워크 프로토콜을 위한 평균 wait time이 application이 동작중일 때 고정적으로 계속 증가된다면, dispatcher process를 추가시킴으로서 성능을 향상시킬 수 있울 것이다.



♣ Adding Dispatcher Processes
▶  오라클이 ALTER SYSTEM 명령의 MTS_DISPATCHER parameter를 runing하는 동안에 dispatcher process를 추가할 수 있다.
▶  dispatcher process의 총 수는 초기화 parameter인 MTS_MAX_DISPATCHERS의 값에 의해 한계가 결정된다.
▶  dispatcher process를 추가하기 전에 이 값을 증가시키는 것이 필요
▶  이 parameter의 default 값이 5이고 최대 값은 operating system에 따라 변화시킬 수 있다.



☞Reducing Contention for Shared Server Porcesses
●  shared server process에 대한 contention을 정의하는 방법
●  shared server process의 최대수를 증가시키는 방법



♣ Identifying Contention for Shared Server Processes
▶  shared server process에 대한 Contention은 request query에 있는 request를 위해 기다리는 시간이 계속적으로 증가함으로 나타난다.
▶  shared server process를위한 request 큐의 행동을 반영하는 statistics는 동적 performance table인 V$QUEUE에 나타난다.
▶  SYS 유저 와 SYSTEM와 같은 SELECT ANY TABLE 시스템 권한을 가진 다른 유저들만이 사용할 수 있다.
▶  이 칼럼은 큐에 응답을 위한 wait time을 보여준다. 이들 칼럼은 큐에 있는 request들을 위한 wait time을 보여준다.
·WAIT :이 칼럼은 큐에 존재했던 적이 있는 모든 request들을 위한 총 waiting time을 백분의 몇초로 나타낸다.
·BUSY : 이 칼럼은 큐에 존재한 적이 있는 request의 총수를 보여준다.
·SELECT DECODE (totalq, 0, 'NO Requests', wait/totalq || 'hundredths of seconds')
              "Average Wait Time Per Requests"
              FROM v$queue
              WHERE type = 'COMMON' ;
▶ 이 질의는 request queue에 대한 request의 총수와 모든 requests에 대한 총 wait time을 반환
▶ 결과는
Average Wait Time Per Request
-------------------------------------------- 
.090909 hundredths of seconds 
▶ 위 결과로부터 한 request는 그것이 처리되기전에 큐에서 평균 백분의 0.09초를 기다린다는 것을 알 수 있다.
▶ 아래의 질의를 통해서 얼마나 많은 shared server process가 동시에 동작하는지를 결정할 수 있다.
·SELECT COUNT(*) "Shared Server Processes"
              FROM v$shared_servers
              WHERE status != 'QUIT';

▶ 결과는
Shared Server Processes
-------------------------------------------- 
10 



♣ Adding Shared Server Processes
▶  존재하는 shared server process에 대한 load가 증가하면 오라클은 자동적으로 shared server process를 증가시키는데, 명시적으로 shared server process를 더 많이 추가시켜 단순하게 성능을 향상시키는 것을 좋지 않다.
▶  그러나 shared server process의 수가 초기 parameter MTS_MAX_SERVERS에 의해 설정된 한계치에 달하고 request 큐에 있는 평균 wait time이 여전히 증가하고 있다면 MTS_MAX_SERVERS값을 증가시킴으로 성능을 향상시킬 수 있다.
▶ 이 parameter의 default값은 20이고 최대값은 operating system에 따라 변할 수 있다.
▶ 오라클이 자동적으로 shared server process를 증가하거나 명시적으로 아래 방법중 하나를 통해서 shared process를 증가시킬수 있다.
·초기 parameter인 MTS_SERVERS
·ALTER SYSTEM 명령의 MTS_SERVERS parameter


목록 | 입력 | 수정 | 답변 | 삭제