원문 : 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

 

 

1. DB2 Architecture & Engine Components

 

 

1. DB2 버전별 차이점

 

  < DB2 9.1 - 프로세스 기반 모델 >

01.png

   -  각 원들은 OS의 프로세스들이다.

 

 

 

  < DB2 9.5 이후 - 다중 스레드 기반 프로세스 모델 >

02.png

 

  - 빨간색 네모상자는 인스턴스를 제공하는 단일 OS 프로세스(db2sync)를 의미한다. 그 안의 원들은 OS 스레드이다.

  - 9.5 이후부터는 스레드 기반으로 바뀐걸 표시하고 있다.

 

 

2. DB2 아키텍쳐 설명

1. 새 멀티스레드 기반 메모리모델의 장점

     - 더 단순하고 쉽게 구성된다.

         @ 구성 메모리와 메모리 heap

         @ 간단해진 메모리 구성

2. 새 모델은 리소스를 저장한다.

     - OS file descriptor 사용이 현저하게 줄어들었다.

       Process 와 Thread 의 가장 분명한 차이는 Process 안의 모든 Threads 가 동일한 메모리 공간과

       시스템 정의기능(system-defined facility)을 공유한다는 것이다.

      이 기능에는 Open File Handle(File descriptor), Shared Memory, 프로세스 동기화 원본(Primitive), 현재 디렉토리가 포함된다.

      Process내 모든 Thread는 같은 File descriptor를 공유할 수 있다. 각 에이전트가 자신의 File descriptor table을 가질 필요가 없다.

3. 성능이 향상되었다.

     - 일반적으로 OS는 다른 프로세스 간에서보다 같은 프로세스내 Thread 간에 더 빨리 Context Switch (문맥교환)할 수 있다.

       Memory Address 공간을 전환할 필요가 없다.

       Global Memory 가 공유되고 새 메모리를 할당할 필요가 없으므로 Thread를 만드는 것이 Process를 만드는 것보다 더 간단하고 빠르다.

       프로세스 생성은 Processor Cycle과 Memory 사용량 측면에서 비용이 많이든다.

4. 자동화되고 동적인 파라미터가 많기 때문에 DBA가 수행해야할 작업이 줄어들었다.

5. 프로세스 모델이 이제 Linux,Unix,Windows 각각 플랫폼에서 모두 똑같다.

 

 

3. 단일 데이터베이스 파티션의 아키텍쳐

03.png

 

1. DB2 엔진은 고유한 기능을 담당하는 여러개의 EDU(Engine Dispatchable Unit)로 구성되어 있으며, 각 EDU는 UNIX에서 Thread로 구현된다.

2. 어플리케이션이 DB에 접속을 요청하면 전용 CoornidatorAgent 프로세스가 생성되어 어플리케이션을 대신하여 DB에게 필요한

SQL문의 실행을 요청하는 역할을 하게 된다. 클라이언트와 서버사이의 통신에는 TCP/IP, APPC, Netbios 등의 프로토콜이 지원된다.

3. 에이전트 프로세스가 필요한 데이터를 가져오기 위하여 Prefetch Queue를 통해 비동기방식의 읽기요청을 하면 Prepatcher 프로세스는 big-block I/O를 통해 요청된 페이지들을 버퍼풀로 미리 가져오므로 에이전트 프로세스는 디스크 I/O 대기시간을 줄일수 있다.

4. 페이지 클리너는 백그라운드 EDU로 특정상황이 될때마다 버퍼풀의 DirtyPage를 디스크로 미리 반영하여 버퍼풀의 가용공간을 확보함으로써 버퍼풀을 사용하는 에이전트프로세스가 대기하는 일이 없도록 한다.

5. 변경된 데이터 페이지와 로그레코드는 성능을 위해 디스크로 즉시 반영되지 않는다. 변경된 데이터를 디스크에 반영할때는 반드시 로그파일에 먼저 기록된다. 이러한 방식을 Write Ahead Logging 이라고 한다.

   - SMP 머신에서 파티션내 병렬 기능을 이용하면, 여러개의 SubAgent를 이용하여 쿼리를 병렬로 처리할 수 있다.

   - 에이전트프로세스의 생성과 제거로 인한 오버헤드를 줄이기 위해 에이전트프로세스를 위한 POOL을 운영할 수 있다.

   - 데이터가 여러 디스크에 걸쳐 스트라이핑 되어있다면, 여러개의 Prefetcher 를 지정하여 여러디스크를 동시에 Access 할 수 있도록 한다.

 

 

 

4. 다중 데이터베이스 파티션의 아키텍쳐

 

04.png 05.png

 

  - 다중데이터베이스 파티션 환경에서 클라이언트에게는 단일 데이터베이스 관점으로 보인다.

  - 다중 파티션에서 환경변수, 전역 수준 프로파일 레지스트리, DB 환경 및 디렉토리등을 공유하는것을 알 수 있다.

 

1. DB2 UDB(버전 8.x)의 Data Partitioning Feature는 다중 데이터베이스 파티션 기능을 이용하여 병렬데이터베이스를 구축한다.

다중 데이터베이스 파티션에 생성된 데이터베이스는 사용자에게는 한개의 논리적인 데이터베이스로 인식되지만, 각 파티션에 물리적으로 데이터베이스를 생성한다. 파티션별로 생성된 데이터베이스는 일반적인 단일 데이터베이스와 동일하게 독립적인 자원을 사용할 수 있으므로 각 파티션은 버퍼풀, 잠금관리, 디스크등을 독립적으로 운영하게 된다.

 

2.  데이터베이스 파티션은 동일한 머신에 생성되는 논리적 파티션과 다른 머신에 생성되는 물리적 파티션으로 구분된다. 동일한 머신에 존재하는 데이터베이스 파티션들은 공유 메모리를 이용하여 통신하고, 다른 머신에 존재하는 데이터베이스 파티션끼리는 고속의 네트워크을 통해서 필요한 부분만 통신한다.

 
3. 응용 프로그램이 접속을 요청하면, 접속한 데이터베이스 파티션에 Coordinator Agent 프로세스가 생성되고, 다른 파티션에는 Subagent 프로세스들이 생성된다. SQL문은 Global optimizer에 의한 최적화된 후에 각 Subagent들에게 전송된다.  Subagent가 해당 파티션의 데이터베이스에 대해서만 SQL문의 요청을 처리하여 결과를 Coordinator Agent 프로세스에게 반환하면, Coordinator Agent는 응용 프로그램에게 최종결과를 반환한다.
§ 
4. MPP 머신으로 구축한 DB2의 다중 데이터베이스 파티션 환경은 완전한 Shared Nothing Architecture를 제공하므로  확장성이 좋다.
  - 다중 데이터베이스 파티션 환경에서는 파티션간 병렬처리가 자동적으로 적용되며, 파티션 내 병렬 처리기능과 함께 사용 할수도 있다.
  - 한 개의 서버에 기본적으로 4개의 논리적 파티션이 생성 될 수 있으며, 필요 시 4개 이상도 생성 할 수 있다.
  - SQL문을 처리하는 각 Subagent 들의 실행은 모든 파티션을 통하여 병렬로 처리된다. DB2가 제공하는 여러가지 유틸리티들도 모두 병렬로 처리된다.

 

5. DB2 Database System

 

§1. DB2 UDB 데이터베이스시스템  ( 엔진, 인스턴스, 데이터베이스로 구성)
  - 엔진 : 서버 머신에 설치된 실제적인 제품 모듈
  - 인스턴스 : DB 엔진을 사용하기 위한 논리적인 환경
  - 데이터베이스: 실질적인 데이터 파일
§
2. 엔진, 인스턴스, 데이터베이스, 테이블스페이스 컨테이너 등 은 물리적으로 분리 되어 있으므로  제품의 재설치, 인스턴스의 재생성시에도 데이터베이스와 관련된 물리적인 파일은 보존되고, 필요시에 다시 사용할 수 있습니다.
 
06.png  

 

 

6. DB2 Architecture

 

1. DB2 Engine Components

07.png

 

-   OSS : Operating System Services :  Sqlo~ 

   "모든operating system call을 만들고 모든memory 관리와 file I/O를 조정하며 Process를 생성한다. "
Memory management
File input and output (disk access)
Process and thread creation and management
Semaphore processing
Authentication with the operating system"
- EDU : Engine Dispatch able Unit :

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

   "db2 instance의main 엔진으로db2start시EDU( engine dispatchable Units)라고 불리는다른 components의 process를 invoke 하고memory를 할당 하는 등의 일을 한다. "
- SQMO : Memory Optimizer :

  " Memory balancing 서비스를 하며 동적memory 할당 관리를 지원한다 "
- RDS : Relational Data Services : Sqlr~ 

  "Common Client (CCI) 의function pointer로부터invoke되며statement를 최적화 하여plan을 만들고 data 추출을 위해 이 plan을DMS에 보내는 일을한다. DMS로 부터 받은result set은CCI를 통해application으로 넘겨준다. "
- DMS : Data Management Services : Sqld~ 

  "RDS로부터access plan을 받아 그 plan대로 data를 추출한다. Data 추출을 위해 index manager, sort list services, file manager등을call한다. Result set을RDS로 반환한다."
- SLS : Sort List Services : Sqls~ 

  "DMS에 의해 호출되며 Index build 나 order by, group by 등에 의한 정렬을 수행한다."
- IXM : Index Manager : Sqli~ 

  "DB2에 있는 모든 index 관리를 하며 Multi Multi-dimensional clustered indexes와 Online Index reorganization 및rebuild를 포함한다."
- DPS : Data Protection Services : Sqlp~ 

  "logging, locking과 같이data 정합성을  보장하는 기능을 제공한다. "
- BPS : Buffer Pool Services : Sqlb~ 

  "모든 data, index, temp overflow page는 buffer pool에서 가공되며, file storage나 raw storage manager를 사용하여OSS를 통해 page를 읽어온다."
- CCI : Common Client : Sqlc~, sqlkf~ 

  "모든client/server communication을 조정한다."

   

2. DB2 Architecture dpswls Components - Function Names 

 08.png

 

 

7. db2dialog.log 파일의 예시

  - 로그파일안에서 동작하는 프로세스명, 컴퍼넌트 및 함수명에 주목.

 

1. DB2 엔진기동

   - 호출 function : BSU : sqle

09.png

 

2. TCP Listener 기동

  - 호출 function : CCI : Common Client : sqlc

10.png

 

3. 첫번째 Connection 연결

  - 호출 function : DPS : Data Protection Services : sqlp~

                              BPS : Buffer Pool Services : sqlb~

11.png

 

4.  SQL 실행

  - 호출 function : RDS : Relational Data Services : sqlr~

                             DPS : Data Protection Services : sqlp~

 

12.png

 

 

5. DB2 유틸리티 수행 (Load)

  - 호출 fuction : Database Utilities : sqlu~

                            Index manager : sqli~

13.png

 

 

6. TableSpace 생성시 Storage 부족

  - 호출 fuction : Data Management Services : sqld~

14.png

 

7. DB2 Configuration 변경
- 호출 fuction : Configuration Services : sqlf~

15.png

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