원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어

Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

 

원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어

 

출처 : IBM Software Group - IBM DB2 Technical Evangelist - 왕천재님 자료에서 발췌

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

IBM DB2 아키텍쳐 및 프로세스 모델

 

1. DB2 Architecture & Engine Components

2. DB2 Process Model

3. DB2 Memory Model

 

 

 

2. DB2 Process Model

 

 

 

[  DB2 프로세스 모델 구조 ]

 

1. DB2 Processing Model

 

02.png

지난 시간에 살펴본 프로세스기반 \모델의 구성도에서 좀더 자세히 살펴보면 다음과 같이 설명된다. 비교해보자.

 

01.png

 

큰 차이는 없지만 EDU가 하는 역할이 좀더 명확히 명시되어 있다.  Coordinator Agent가 바로 db2agent.

 

 

2. Main DB2 EDU 의 구조

 

03.png

 

EDU  : 데이터베이스 애플리케이션의 요청 처리, 데이터베이스 로그 파일 읽기, 로그 버퍼의 로그 레코드를 디스크의 로그 파일로 플러시하는 것과 같은 여러 작업 수행을 담당한다.

위 그림에서는 각 Instance / Application / Database / Request 레벨에서 하는 역할이 표시되고 있다.

 

04.png

 

 DB2 9.5 버전에서의 차이점. 프로세스 기반에서 스레드 기반으로 변경되면서 Instance 레벨에서 많이 간소화되었다.

db2wdog, db2gds,db2fcmdm,db2srvlst 등이 삭제되고  db2aiothr 로 통합되었다.

 

 

 

3. 단일 DB 파티션 상에서의 DB2 프로세스 모델 

- 데이터베이스 엔진과 관련된 프로세스들은 방화벽을 통해 외부의 응용프로그램 프로세스들과 다른 adress space를 사용하도록

구성되어있으므로, 데이터베이스 제어블록 및 중요한 데이터베이스 파일과 분리되도록 설계되어 있다.

 

3-1. 인스턴스 : 인스턴스 레벨의 프로세스는 db2start 명령을 실행하여 인스턴스를 기동할때 생성되며

  db2fmcd, db2wdog, db2sysc, db2ckpwd, db2acd, db2fmd 가 있다.

  그리고 동시에 db2sysc, db2tcpcm, db2pfchr, db2pclnr 등의 EDUs가 실행된다.

 

3-2. 데이터베이스 : 데이터베이스 레벨에서는 EDUs로 보여지며 activate db 명령어에 의해 데이터베이스가 활성화될때 생성되고,

  deactivate db 명령어에 의해 데이터베이스가 비활성화되면 제거된다.

  db2evmgi, db2fw0, db2wlmd, db2pfchr, db2pclnr, db2dlock, db2lfr, db2loggw, db2taskd, db2stmm등의 EDUs가 있다.

 

3-3. 응용프로그램 : 응용프로그램 레벨에서도 EDUs로 보여지며 지역 또는 원격 응용프로그램이 데이터베이스에 접속을 요청하는

경우에 생성된다. db2agent, db2agntp 등의 EDUs가 있다.

 

 

4. 다중 DB 파티션 상에서의 DB2 프로세스 모델 

05.png

 

 - 파티션 PROD(좌), 파티션 TEST(우)  다중 데이터베이스 파티션 환경에서의 EDU 역할

 

4-1. 인스턴스 : 단일 데이터베이스 파티션 환경과 동일한 시점에 생성되고 제거된다.  db2pdbc, db2fcmd 등의 EDUs가 추가된다.

4-2. 카달로그 파티션 : 단일 데이터베이스 파티션 환경과 동일한 시점에 생성되고 제거된다. db2glock EDUs가 추가된다.

4-3. 데이터베이스 파티션 : 단일 데이터베이스 파티션 환경과 동일한 시점에 생성되고 제거된다.

4-4. 응용프로그램 : 단일 데이터베이스 파티션 환경과 동일한 시점에 생성되고 제거된다.

 * db2pdbc, db2panic, db2glock 등은 다중파티션 환경에서만 존재하는 프로세스

 

 

 

[ 인스턴스 수준의 프로세스 ]

 

1. 인스턴스 레벨의 프로세스 - 최초기동시 생성되는 프로세스들

 

1-1. db2sysc : DB2 9.5 이상의 시스템에서 db2start 명령과 동시에 발생되는 프로세스이다.

이 한개의 프로세스로 모든 파티션의 쓰레드를 처리하도록 멀티-쓰레드로 되어있으며, 여기에는 모든 EDU가 쓰레드로

구성되어있다. 따라서 이 프로세스 없이는 데이터베이스가 실행될 수 없다.

UNIX환경에서는 db2sysc,  Windows 환경에서는 db2syscs 로 명명한다.

 

1-2. db2gds : 9.1버전 DB2 Global Daemon Spawner 로 모든 EDU를 생성한다.  UNIX플랫폼의 DB2 9.5 에서는 존재하지 않는다.

 

1-3. db2wdog : 9.1버전에서는 DB2의 PPID를 tracking. 새로운 프로세스가 시작될때마다 db2gds가 db2 watchdog에 알려주며

db2의 어느 프로세스라도 다른 비정상적인 signal을 받으면 그 프로세스는 watchdog에 signal을 보낸다.

watchdog는 그 signal을 인스턴스내의 다른 프로세스에게 전달한다.

9.5버전 부터는 쓰레드기반으로 바뀌면서 db2gds가 없어졌으므로 db2wdog는 db2sysc를 감시하는 역할로 바뀌었다.

db2sysc 프로세스의 비정상 종료시 IPC 자원을 정리하고, db2fmp 및 Health monitor 프로세스를 생성,정리,재시작시키며,

Agent 의 스케줄링 우선순위(priority)를 조정한다. (단, DB2를 root로 설치하지 않았을때는 지원되지 않는 기능)

 

1-4. db2vend : Fenced Vendor Process. EDUs 에서 처리할 수 없는 모든 Vendor code 실행은 엔진외부에서 이 프로세스로 수행

예) userexit

 

1-5. db2fmp : stored procedures 또는 user defined functions(UDF) 와 같이 DB2 의 외부에서 실행되는 코드를 처리한다.

db2fmp 프로세스는 항상 별도의 프로세스이지만 실행하는 루틴의 유형에 따라 멀티쓰레드일수 있다.

DB2 8.7 이하에서의 db2udf 와 db2dari 프로세스가 db2fmp 프로세스로 대체되었다.

 

1-6. db2aiothr : 비동기식 I/O collector threads

 

1-7. db2licc : License controller.

 

1-8. db2acd : Health Monitor, 자동 유지보수 유틸리티 및 관리태스크 스케줄을 관장하는 Automatic Computing Daemon이다.

db2hmon에서 db2acd로 바뀌었다.

 

 

 

2. 인스턴스 레벨의 프로세스 - Connect 시에 생성되는 리스너

06.png

 

2-1. db2ipccm : DB2 IPC Communication Manager. 데이터베이스에서 로컬로 접속을 요청하는 응용프로그램을 지원하는 통신 리스너 EDU.

한개의 로컬 응용프로그램으로 데이터베이스의 접속을 요청받으면, db2agent EDU를 생성하여 해당 응용프로그램 프로세스와 생성한

db2agent EDU를 연결한다. 연결이 완료되면, db2agent EDU가 로컬 응용프로그램 프로세스와 엔진을 연결하는 역할을 하게되고, db2ipccm은 새로운 접속 요청을 대기하게 된다.

 

2-2. db2tcpcm :DB2 TCP Communication Manager. TCP/IP 프로토콜을 이용하여 접속을 요청하는 원격 응용프로그램을 지원하는 통신 리스너 EDU. db2ipccm과 동일한 방법으로 작동한다.

 

2-3. db2snacm : DB2 SNA/APPC Communication Manager. SNA/APPC 프로토콜을 이용하여 접속을 요청하는 원격 응용프로그램을 지원하는 통신 리스너 EDU. db2ipccm과 동일한 방법으로 작동한다.

 

2-4. db2tcpdm : DB2 TCP Dicovery Manager. 클라이언트 머신에서 TCP/IP 프로토콜을 이용하여 원격 데이터베이스 서버의 인스턴스를 자동으로 발견해내는 기능인 DISCOVERY 요청을 처리하는 통신 리스너이다.

 

 

 

3. 인스턴스레벨의 프로세스 - 아카이브 로깅시

 07.png

 

 3-1. db2cart : 아카이브로깅에서 UserExit 가 설정되어있는 경우에 사용된다. 로그파일을 아카이브해야 하는 시점을 결정하고,

Disk 또는 Tape 등의 저장매체로 로그파일의 아카이브를 실제로 수행하는 user exit 프로그램을 호출한다.

UserExit 프로그램을 이용한 아카이브 로깅을 사용하려면 데이터베이스별로 설정해야 한다.

데이터베이스 구성변수인 LOGRETAIN=ON으로 설정하고 USEREXIT=ON으로 설정한다.

 

3-2. db2fmtlg : DB2 Format Log.  UserExit 프로그램을 사용하지 않지만, 로그파일을 현재의 로그 디렉토리에 아카이브하는 경우에 로그파일을 미리 포맷하여 할당한다. DB2 엔진프로세스는 특정한 로그파일에 대한 기록을 완료하고, 다른 로그파일로 연속적으로 기록하는 경우에 새로운 로그파일이 생성될때까지 기다리지 않고 처리를 계속할 수 있도록 한다. UserExit 프로그램을 이용하지 않고 현재의 로그디렉토리에 아카이브만 하게 하려면 데이터베이스 구성변수인 LOGRETAIN=ON, USEREXIT=OFF로 설정한다.

 

 

 

4. 인스턴스 수준의 프로세스 - 특정명령어 유틸리티

08.png

 

4-1. db2chkau : DB2 Check Audit.  db2audit 시작시에 생성된다.   db2audit 유틸리티가 DB2 audit 로그파일의 각 항목을 audit 버퍼에서

$instance_home/sqllib/security/db2audit.log 파일로 로깅할때 사용된다.

 

4-2. db2govd : DB2 Governor Daemon.  db2gov 시작시에 생성된다.  db2gov 유틸리티가 governor configuration 으로 지정한 규칙에 따라 데이터베이스에서 수행되는 응용프로그램을 모니터링하고, 지정한 임계값을 초과한 응용프로그램에 대한 조치를 취하기 위해 사용된다.

db2gov 유틸리티는 데이터베이스에 대한 응용프로그램이 아니므로, 데이터베이스에 접속하는것이 아니라, 인스턴스에 접속한다.

 

4-3. db2rebal : DB2 Rebalancer.  테이블스페이스에 Container 추가시 호출되어, 기존 데이터를 추가된 컨테이너로 균등하게 분산시키는 작업을 수행한다.  단, 컨테이너를 추가할 경우이며, 기존 컨테이너의 크기만 늘리는 경우에는 db2rebal 프로세스가 호출되지 않는다.

 

 

 

5. 인스턴스 수준의 프로세스 - 파티션 환경

09.png

 - 한개의 SQL문을 두개의 파티션에서 병렬로 실행시키고자 할 경우 두개의 트랜잭션이 서로 Lcok wait이 결려 Dead Lock 이 발생하게 된다.

- 이때 db2glock 프로세스가 점검하여 한쪽의 응용프로그램을 강제종료시켜 DeadLock 상태를 풀어준다.

 

5-1. db2fcmd : DB2 Fast Communication Manager Deamon.  파티션간의 통신에 사용된다.

 

5-2. db2fcms : Fast Communications Manager Sender.

 

5-3. db2glock : DB2 Global Deadlock Detector.  개별 파티션에 있는 db2dlock 프로세스로부터 수집된 정보를 모아서 데이터베이스 파티션간의 데드락 상태가 발생했는지를 점검한다.  카달로그 파티션에 존재한다.

 

5-4. db2panic : DB2 Panic.  특정한 데이터베이스 파티션에서 Agent 의 한계(PANIC)에 도달하게 되면 긴급 요청을 처리한다.

 

5-5. db2pdbc : DB2 Parallel Database Controller. 원격 데이터베이스 파티션간의 병렬요청을 처리한다. 개별 데이터베이스 파티션마다 한개씩 존재한다.

 

 

 

6. 인스턴스 수준의 프로세스 - Fault Monitor

10.png

 - db2fmcd 와 db2fmd 프로세스는 UNIX 플랫폼에서만 존재한다.

 - db2fmcd프로세스는 기본적으로 시스템 부팅시에 시작되도록 /etc/inittab 파일에 등록되어있다.

    ==>    respawn:/opt/ibm/db2/V9.7/bin/db2fmcd

 

6-1. db2fmcd : DB2 Fault Monitor Coordinator Daemon.  시스템 부팅시에 생성된다.(/etc/inittab)  각 데이터베이스 서버머신에 한개씩 존재하며, db2fmd 프로세스에 이상이 없는지를 모니터링한다. 사용자가 kill 로 강제로 db2fmd 프로세스를 제거하더라도 db2fmcd 프로세스가 다시 생성시킨다.

 

6-2. db2fmd : DB2 Fault Monitor Daemon.  db2start시에 생성된다.  DB2 인스턴스를 모니터링 하는 데몬으로 DB2 인스턴스가 db2stop 명령어에 의하여 정상적으로 중지되는 것을 제외한 경우에 다시 엔진을 기동시키는 역할을 한다. HA 환경을 구성하는 경우에는 db2fmcd와 db2fmd 프로세스가 자동적으로 시작되지 않도록 해야 한다.

 

 

 

7. 인스턴스 수준의 프로세스 - OS 관련작업

11.png

 

7-1. db2ckpw : DB2 Check Password.  DB2 UDB는 OS의 인증시스템을 이용하여 사용자에 대한 인증을 실행한다. 원격 클라이언트 응용프로그램에서 제공된 사용자명과 암호가 OS에 등록된 사용자 정보와 일치하는지를 점검하여 접속의 허용여부를 결정한다. AIX에서 사용자인증을 위해 /etc/security/passwd 파일을 사용한다.

 

7-2. db2resyn : DB2 Resynchronization.  2-phase commit 방식을 사용하는 응용프로그램에 대한 동기화를 담당한다. 단일 또는 다중 파티션 환경에서 모두 사용된다.

 

7-3. db2srvlst : DB2 Server List.  OS/390과 같은 시스템에 대한 address list를 관리하는데 사용된다. parallel Sysplex와 함께 사용된다.

 

7-4. db2syslog : DB2 System Logger.  OS의 시스템 오류 로그파일에 오류를 기록한다.

 

7-5. db2disp : DB2 Dispatcher. Connection Concentration 기능을 사용하는 경우에 생성된다. 응용프로그램에 할당되어 있는 Logical Coordinating Agent 와 사용가능한 Coordinate Agent 를 연결시키는 역할을 한다.

 

 

  

[ 데이터베이스 수준의 프로세스 ]

 

1. 데이터베이스 수준의 프로세스 - Buffer Pool과 Tablespace I/O

  - 데이터베이스가 활성화될때 생성 (activate db 명령, connect 명령)

 

 

12.png

 

1-1. db2pfchr : DB2 Bufferpool Prefetcher.  PreFetcher는 테이블과 인덱스의 데이터를 테이블스페이스 컨테이너인 디스크로부터 버퍼풀로 비동기식으로 미리 읽어들이는 역할을 한다.

각 응용프로그램을 대신하는 db2agent 프로세스가 db2pfchr 프로세스에게 PreFetch 요청을 보내면, db2pfchr는 Big-Block I/O방식으로 데이터를 효율적으로 읽어들인다.  데이터베이스 구성변수인 NUM_IOSERVER 를 이용하여 데이터베이스별로 활동할 PreFetcher의 개수를 지정한다.(자동)

 

1-2. db2pclnr : DB2 Bufferpool Page Cleaner.  버퍼풀에 가용공간을 확보하기 위해 버퍼풀로부터 비동기식으로 테이블스페이스 컨테이너에 변경된 데이터를 기록한다.  특정한 페이지클리너가 작업을 시작하면, 다른 페이지클리너들도 동시에 작업을 수행한다.

작업이 완료되면, 페이지 클리너 프로세스들은 sleep 상태로 대기하게 된다. 데이터베이스 구성변수인 NUM_IOCLEANERS를 이용하여 데이터베이스별로 활동할 페이지 클리너의 개수를 지정한다.(자동)

 

1-3. 변수, 구성요소들

- NUM_IOSERVER : 데이터베이스 별 프리페쳐 (db2pfchr) 개수를 지정하는 구성변수(자동)

- NUMIOCLEANERS : 데이터베이스 별 페이지클리너 (db2pclnr) 개수를 지정하는 구성변수(자동)

- good victim page : 프로세스가 버퍼풀의 페이지를 요구하는 시점 직전에 디스크로 변경사항이 기록된 페이지.

                                 Agent가 버퍼풀 전체를 검색할 필요 없음.  기준값이하로 떨어지면 페이지 클리너 호출

- Dirty Page : 버퍼풀에서 그 값이 변경되었으나, 테이블스페이스의 컨테이너에 아직 반영되지 않은 값이 포함된 페이지.

- CHNGPGS_THRESH : 변경된 페이지 임계값 구성 매개변수. 기본값은 60%. 

                                          갱신작업이 많다면 기준값 이하로 설정하여 버퍼풀에 가용페이지를 충분히 확보하는것이 유리함.

- Dirty Page Threshold : 버퍼풀의 Dirty Page의 비율이 구성값을 초과할때 db2agent가 페이지 클리너 프로세스를 호출

- LSN : Log Sequence Number. 엔진이 트랜잭션을 식별하고 추적할수 있게 번호를 매김.

- MINBUFFLSN : Commit 되었지만, 테이블스페이스 컨테이너로 반영되지 않은 가장 오래된 LSN을 표시함.

                               버퍼풀에서 가장 오래된 Dirty Page의 LSN을 의미함.

- SOFTMAX : 기본값은 100%.  복구범위 및 소프트 체크포인트 간격 구성 매개변수. 로그파일 한개 크기만큼.

- LSN Gap Threshold : MINBUFFLSN과 현재 LSN의 차이가 SOFTMAX의 값을 초과할때 Log Writer 프로세스가 페이지클리너를 호출

 

 

 2. 데이터베이스 수준의 프로세스 - 로그파일 I/O

 

2-1. db2loggr : DB2 Database Log Reader.   트랜잭션 롤백, 응급복구, 아카이브로그 적용시에 로그파일로부터 데이터베이스 로그 레코드를 읽어들이는 역할

13.png

2-2. db2loggw : DB2 Log Writer. 

  - 로그버퍼에 공간이 없는 경우에도 로그버퍼에 저장된 로그레코드를 로그파일로 기록하는 역할

  - 버퍼풀의 Dirty Page가 디스크로 반영되거나 commit 이 요청되는 경우에도 작동

 

2-3. WAL : Write Ahead Logging.  버퍼풀 또는 로그버퍼에 있는 데이터가 테이블스페이스의 컨테이너에 기록될때에는 반드시 로그파일에 먼저 기록이 되어야 함.

 

2-4. db2logts : DB2 log Tablespace. 

  - 테이블스페이스가 변경될 당시에 어떤 로그가 활성화 상태였는지에 대한 history 정보를 수집하는데 사용

  - 수집된 정보는 DB2TSCHG.HIS 파일에 저장되며, 테이블스페이스에 대한 롤포워드 복구시에 해당 테이블스페이스의 복구작업에 불필요한 로그파일은 적용하지 않으므로 복구의 성능을 향상시키는데 사용

14.png

2-5. DB2_COLLECT_TS_REC_INFO : 테이블스페이스를 롤포워드 할때 테이블스페이스에 영향을 미치는 로그레코드가 로그파일에 포함되어있는지 여부와 관계없이 DB2가 모든 로그파일을 처리하는지 여부를 지정한다.

  - 테이블스페이스에 영향을 미치는 로그레코드를 포함하지 않는 것으로 알려진 로그파일을 건너뛰려면 이변수를 ON으로 설정해야 한다.

  - 로그파일을 건너뛰는데 필요한 정보를 수집하기 위해 로그파일을 작성하고 사용하기전에 DB@_COLLECT_TS_REC_INFO를 설정해야한다.

 

 

3. 데이터베이스 수준의 프로세스 - 아카이브로그

 

3-1. 아카이브로그파일의 USEREXIT와 연관된 프로세스

  - db2logmgr : LOGARCHMETH1 변수에 로그 디렉토리명이 지정된 경우에 사용.

                          사용자가 정의한 user exit program을 사용하지 않고, 엔진이 직접 로그파일을 아카이브 한다.

  - db2dlock : DB2 Local Deadlock Detector.  파티션마다 존재하며, LOCKLIST를 스캔하여 교착상태를 검출하는 역할

                       교착상태에 있는 응용프로그램중에서 희생자(victim)로 선택된 응용프로그램은 롤백.

                       희생자를 결정하는 우선순위는 내부적인 기준에 의해 결정.

                       db2dlock은 Z잠금을 보유한 응용프로그램 또는 load, redistribute, online reorg등을 실행하는 세션은

                       희생자프로세스가 되지 않도록 고려

 

3-2. 데이터베이스 수준의 프로세스 - 기타

  - db2estor : DB2 Extended Storage Manager. 

                      데이터베이스 버퍼풀과 확장스토리지 사이에서 데이터 페이지를 복사할때 사용

                      NUM_ESTORE 변수가 설정된 경우에만 사용.  64비스테서는 필요없음

  - db2even : DB2 Event Monitor

                      활성화된 이벤트 모니터에 대해 각각 한개씩 할당되어 이벤트모니터 정보를 수집.

  - db2taskd : 백그라운드 데이터베이스 태스크 분산용. 이러한 태스크는 db2taskp라는 스레드가 실행

  - db2hadrp : HADR 기본 서버 스레드

  - db2hadrs : HADR 대기 서버 스레드

  - db2lfr : 개별 로그파일을 처리하는 로그파일 판독기용

  - db2redom : Redo Master.  복구 중 redo 로그 레코드를 처리하고 redo 작업자에게 처리할 로그레코드를 지정한다.

  - db2wlmd : WorkLoad Manager. 워크로드 관리 통계의 자동수집용.

  - db2redow : Redo Worker. 복구중 redo 마스터의 요청에 따라 redo 로그 레코드를 처리함

  - db2shre : 로그페이지의 개별로그 레코드 처리용

  - db2thcln : EDU가 종료되면 자원을 재활용 (UNIX 전용)

  - db2alarm : 요청한 타이머가 만기된 경우 EDU에 통지(UNIX전용)

  - db2aiothr : 데이터베이스 파티션의 비동기 입출력 요청을 관리 (UNIX 전용)

  - db2pdbc : 리모트 데이터베이스 파티션의 병렬요청을 처리하는 병렬시스템 제어기(파티션 DB)

 

 

 

[ 응용프로그램 수준의 프로세스]

 

1. 응용프로그램 수준의 프로세스 - 리스너 프로세스

   - 지역 또는 원격 응용프로그램이 데이터베이스에 접속을 요청할 때 생성

15.png 

 

1-1. db2agent : DB2 Coordinator Agent

  - 접속을 요청한 응용프로그램을 대신하여 엔진에게 응용프로그램의 요청을 전달하고, 엔진이 반환한 결과를 응용프로그램에 전달

  - 응용프로그램별로 한개의 db2agent 프로세스로 관리

  - Coordinator Agent 또는 간단하게 Agent 프로세스라고 함.

 

1-2. db2agntp : DB2 Sub-Agent

  - 병렬처리가 가능한 환경인 경우에 Agent는 응용프로그램으로부터 전달받은 요청들을 SubAgent에게 분해하여,

    엔진에게 요청을 전달하도록 SubAgent들이 엔진으로부터 받은 결과를 다시 Agent에게 반환하면, Agent가 종합하여

    응용프로그램에게 최종적인 결과를 반환함

  - db2agentg : DB2 Gateway Agent

    DB2 Connect 제품을 이용하여 호스트 DB에 접속하거나, 다른 인스턴스를 경유하여 DB에 접속을 요청하는 경우에는

   db2agent 대신에 db2agentg프로세스가 생성됨

 

1-3. 관련변수

  - MAXAGENTS : 에이전트 프로세스의 총개수

  - MAX_COORDAGENTS : 인스턴스에서 생성될수 있는 Coordinator Agent 프로세스의 최대개수

  - MAXAPPLS : 데이터베이스에 접속할 수 있는 응용프로그램의 최대개수

 

 

2. 응용프로그램 수준의 프로세스 - Agent Pooling

  - SubAgent로 생성되어 사용이 완료된 프로세스는 성능을 위해 즉시 제거하지 않고 Agent Pool에 저장하였다가 재사용할 수 있다.

  - Agent Pooling을 사용시 응용프로그램이 접속을 요청시 에이전트를 생성하는 오버헤드를 줄임.

  - NUM_POOLAGENTS 와 NUM_INITAGENTS 조절.

16.png

 

  - db2agnta : 특정 응용프로그램에 대한 작업종료시 Agent Pool에서 응용프로그램에게 할당되기를 기다리는 Agent를 Idle Agent라고 하고, 다른 Coordinator Agent 에 의해 요청되어 다시 SubAgent로 사용됨

 

  - Agent 프로세스 할당 우선순위 결정방법 (Assigning SubAgents)

    = 요청한 응용프로그램과 연관이 있으면서 Idle 상태에 있는 SubAgent를 할당

    = 다른 응용프로그램과 연관이 있으면서 Idle 상태에 있는 SubAgent를 할당

    = MAXAGENTS 구성변수의 값에 도달하지 않았다면 새로운 SubAgent를 생성

    = 다른 응용프로그램과 연관이 있으면서 Idle한 SubAgent를 가로채기 함.

 

 

3. 응용프로그램 수준의 프로세스 - 병렬복구처리

  - Coordinator Agent는 읽어온 로그레코드를 병렬프리페쳐를 이용하여 버퍼풀로 저장.

  - Parallel Recovery Agent 들은 버퍼풀의 데이터를 이용하여 병렬로 복구작업을 진행.

17.png

  - db2agnsc : DB2 Parallel Recovery Agent

    = 로그파일에서 읽어온 로그레코드의 내용에 따라 rollforward restart db, rollforward 명령을 병렬로 처리하여

       복구유틸리티의 성능을 높이기 위해 사용

    = 병렬처리에 사용되는 Agent 프로세스의 개수는 SMP머신의 CPU개수를 고려하여 엔진이 결정.

 

 

 

 

 

 

 

서버에 요청 중입니다. 잠시만 기다려 주십시오...