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

 

 

 

3. DB2 Memory Model

 

[ DB2  메모리모델의 구조 ]

 

01.png

  - DB2  V8~V9.1 까지의 메모리 모델 구성도

 

02.png

  - DB2 V9.5 에서 변경된 메모리모델.

  - V9.1 까지의 모델과 차이점을 살펴보면

     = Instance Global Control Block 에 포함되어있었던 Sort Heap Threshold 항목이 Database Global Memory 쪽으로 변경

    = Application 그룹에 할당되던 메모리를 빼고, Database 에 할당하여 Global 메모리를 공유메모리화

    = 클라리언트에 할당되는 db2agent 에도 공유메모리 할당

 

 

03.png

  - 위의 그림과 같이 메모리 구조가 할당된다.

  - Instance shared memory

  - Database Shared Memory

  - Application Group shared Memory

  - Agent Private Memory

 

1.  Instance shared memory

    : 인스턴스 공유 메모리 영역은 전체적인 DB2 세션들이 공유해서 사용할 수 있는 메모리 영역이다.

  - 인스턴스를 기동할때 할당되고, 인스턴스를 중지할때 해제된다.

  - Monitor heap, FCM, Audit buffer등이 포함.

  - Monitor Heap : 스냅샷모니터, 이벤트 모니터등을 이용하여 모니터링 정보를 수집할때 사용되는 메모리 영역

                                 MON_HEAP_SZ 인스턴스 구성 변수를 이용하여 조절

  - FCM : 다중 데이터베이스 파티션 환경에서 파티션간의 통신에 사용되는 메모리 영역.

                 FCM_NUM_BUFFEERS 인스턴스 구성 변수를 이용하여 조절

  - Audit Buffer : db2audit 유틸리티가 수집한 데이터를 저장하는 audit용 버퍼영역

                             db2chkau 프로세스는 audit용 버퍼에 저장된 데이터를 db2audit.log파일에 비동기식으로 기록.

                             AUDIT_BUF_SZ 인스턴스 구성변수를 이용하여 조절

04.png

 

 

2. Database Shared Memory

  : 데이터베이스 공유 메모리 공간은 실제 agent 들의 요청을 받아서 요청을 처리하는 메모리 공간이다.

  - 데이터베이스가 활성화 될때 할당되고, 비활성화되면 해제.

  - Buffer pool, Database Heap, Catalog Cache, Log buffer, Lock List, Package Cache, Shared Sort heap, Utility Heap 등이 포함.

05.png

 

  - Buffer Pool : 버퍼풀은 테이블 및 인덱스 데이터 페이지를 디스크에서 읽거나 수정할때 캐시하기 위해 사용되는 메모리이다.

                           버퍼풀은 디스크 대신 메모리에서 데이터를 Access 할 수 있도록 허용함으로써 성능을 향상시킨다.

  - Database Heap : 테이블, 인덱스, 테이블스페이스, 버퍼풀 등의 데이터베이스 오브젝트에 대한 Control Block 정보를 저장하고,

                                  Log Buffer와 Catalog Cache를 포함하는 영역으로 데이터베이스 구성변수인 DBHEAP 을 이용하여 동적으로

                                 조절할 수 있음

  - Catalog Cache : SQL문을 컴파일 하는 동안 SYSIBM.SYSTABLES, SYSIBM.SYSDBAUTH, SYSIBM.SYSROUTINES 등의

                                 시스템카탈로그의 정보를 저장하는 메모리영역으로 Database Heap 에서 할당되며,

                                 CATALOGCACHE_SZ 변수로 동적으로 조절

  - Log Buffer : 로그 레코드를 디스크의 로그파일에 기록하기전에 버퍼링하는 메모리 영역으로 Database Heap에서 할당되며

                          데이터베이스 구성변수인 LOGBUFSZ를 이용하여 동적으로 조절

  - Lock List : 데이터베이스에 접속된 모든 어플리케이션이 보유하고 있는 테이블과 행잠금 정보를 저장하는 메모리영역.

                        LOCKLIST변수로 조절

  - Package Cache : Static 및 dynamic SQL문을 젖아하는 캐시영역으로 Static SQL문이 포함된 패키지를 reload하거나

                                  Dynamic SQL문을 재컴파일 하는 내부적인 오버헤드를 줄여준다.  PCKCACHESZ 변수로 조절한다.

   - Shared Sort Heap : Shared Sort Memory는 SubAgent 들이 정렬작업을 병렬로 처리하고, 그 결과를 공유하기 위해 사용하는

                                       메모리영역. SHEAPTHRES_SHR 변수로 조절한다.

   - Utility Heap : Load, Backup, Restore, Runstats 등의 유틸리티가 실행될때 사용하는 메모리 영역으로 동적으로 조절가능.

                              유틸리티가 수행도리때 할당되고, 유틸리티가 종료되면 반환된다.  UTIL_HEAP_SZ 변수로 조절한다.

 

 

3. Application Group shared Memory

 : 해당 응용프로그램에 연관된 모든 에이전트 프로세스 사이의 정보를 교환을 위해 사용되는 영역.

  - 병렬처리가 가능한 환경에서 응용프로그램의 첫번째 에이전트 프로세스가 데이터베이스에 연결을 요청하는 경우에 할당.

  - 해당 응용프로그램과 연관된 모든 EDU들이 Access 할 수 있다.

  - 특정 응용프로그램의 요청을 처리하는 SubAgent 와 Coordinator Agent 간의 정보 교환.

  - Application Control Heap

06.png

  - Application Control Heap : 해당 응용프로그램과 연관된 모든 에이전트 프로세스 사이의 정보를 교환하기 위해 사용되는 영역.

      이 영역은 선언된 임시테이블에 대한 Descriptor 정보를 저장하는데도 사용.

      명시적으로 삭제되지 않은 선언된 모든 임시테이블에 대한 Descriptor 정보가 보존되므로 선언된 임시테이블이

      삭제될때까지 메모리를 반환할 수 없다.  파티션마다 각 연결에 한개씩 할당되며, APP_CTL_HEAP_SZ 변수로 조절한다.

 

 

4. Agent Private Memory

  : 각 DB2 에이전트 프로세스는 작업을 수행할 메모리를 획득해야 한다. 어플리케이션을 대신하여 Access 게획을 최적화, 구현,

   실행하고, Sort를 수행하고, 위치와 상태같은 Cursor 정보를 기록하고, 통계를 모을 메모리를 사용하게 된다.

   - 지역 또는 원격 응용프로그램이 데이터베이스에 접속을 요청하는 경우에 할당되고, 접속을 종료하면 해제.

   - Sort Heap, Satement Heap, Application Heap, Statistics Heap, Query Heap 등

07.png 

  - Sort Heap : 정렬작업 또는 Hash Join 이 필요할때 할당되고, 작업이 종료되면 메모리 반환, SORTHEAP 변수로 조절.

  - Statement Heap : SQL 컴파일러의 작업영역으로 사용되는 메모리. 프리컴파일 또는 바인드 작업시에 각 SQL문에 대해

                                  할당되고, 작업이 종료되면 반환.  STMTHEAP 변수로 조절.

  - Application Heap :  db2agent 프로세스의 개별 작업 영역으로 서브에이전트 프로세스가 SQL문에 대한 패키지 중에서

                                       실행가능한 섹션을 복사하여 저장하는데 사용.

                                       SQL문에 대한 실행섹션은 요청된 SQL문을 수행하기 위해 필요한 정보를 제공하며, 이 메모리 영역에

                                      캐시된 섹션은 재사용되어 오버헤드를 줄일수 있음. APPLHEAPSZ 변수로 조절.

  - Statics Heap : 명령어가 실행될때만 Utility Heap으로부터 할당받는 메모리 영역.   Runstats 실행시 메모리를 사용

                             STAT_HEAP_SZ 변수로 조절.

  - Query Heap : db2agent 프로세스가 쿼리문, SQLCA, SQLDA, 패키지 등의 이름과 생성자, 섹션번호, 일관성 토큰등을

                             저장하는데 사용.  QUERY_HEAP_SZ 변수로 조절.

 

 

 

[ DB2 메모리모델 - DB2 9 새로운 메모리 기능 ]

 

1. 단순화된 다중 스레드 아키텍쳐

  - DB2 9.5는 모든 플랫폼에 다중 스레드 아키텍쳐가 있다.

    9.5 이전 버전에서 유닉스, 리눅스 기반 Db2는 각 에이전트가 각각 고유 프로세스를 실행하는 프로세스 기반 모델을 사용했다.

   다중 스레드 아키텍쳐는 Db2의 메모리 Footprint를 줄인다.

 

2. 모든 플랫폼에서 사용가능한 STMM.

  - DB2 9.1에서는 AIX 및 Windows 에서만 전체 데이터베이스 메모리에 대해 database_memory 매개변수를 자동으로 설정하여

    STMM을 사용할 수 있었다. 그러나 DB2 9.5에서는 모든 플랫폼에서 사용이 가능하다.

 

3. 보다 많은 구성 매개변수를 자동으로 설정하여 동적으로 구성할 수 있다.

  - 이러한 매개변수에는 applheapsz, database_memory, dbheap, instance_memory, mon_heap_sz, stat_heap_sz, stmtheap 등이 있다.

 

4. NO_FILE_SYSTEM_CACHING 이 기본이다.

  - Db2 9.5에서 테이블스페이스 컨테이너를 만들면 기본적으로 데이터베이스 매니저가 가능한 경우마다 동시 I/O

    (CIO : Cuncurrent I/O) 를 사용하려고 시도한다. CIO가 지원되지 않는 시스셈구성의 경우 직접I/O (DIO) 또는 버퍼링된 I/O

    (Buffered I/O) 가 대신 사용된다. CIO나 DIO를 설정하면 데이터베이스 매니저가 파일시스템 레벨에서 캐싱을 사용하지

   않기 때문에 메모리 성능이 향상된다.

   각 메모리세트는 다양한 메모리 풀을 구성하고 있다.

 05.png

       

      위 그림에서는 메모리풀의 이름이 나열되어 있다. 예를들어 LockList는 데이터베이스 공유메모리 세트에 속한 메모리 풀이다. Private Sort Heap 은 에이전트 개인 메모리 세트에 속한 메모리 풀이다.

 

5. 64비트 AIX에서의 대형 페이지(16MB) 지원.

  - 대형 페이지 사용은 집중적으로 메모리 접근을 필요로 하며 다량의 가상메모리를 사용하는 고성능 어플리케이션에 성능향상을 위해서 제공된다.

 

6. database_memory 구성 매개 변수의 새로운 값.

  - DB2 9 에서 database_memory 구성 매개변수의 COMPUTED 설정은 DB2 8버전에서의 AUTOMATIC 설정과 같다. DB2 9에서 database_memory 매개변수를 AUTOMATIC(AIX 및 Windows의 경우)으로 설정하면 데이터베이스 메모리 사용을 자동으로 튜닝하는 새로운 자가튜닝메모리관리 기능을 이용할 수 있다.

 

7. 새 구성 매개 변수 db_mem_thresh

  - database_memory 매개변수에서 사용되지 않은 부분이 물리적 메모리량을 제어하도록 새로운 데이터베이스 구성매개변수인 db_mem_thresh을 추가해 왔다.

 

8. Sheapthres_shr 매개변수 변경

  - Sheapthres_shr 매개변수는 어떤 한 시점에서Sort 메모리 소비가 총 데이터베이스 공유메모리의 양을 제한하는 것을 의미한다. Db2 8버전에서는 이것이 하드제한(Hard limit) 이었다. 만약 정렬 메모리가 한계에 가까워지면 경고가 발생된다. DB2 9의 Sheapthres_shr 매개변수는 소프트제한(soft limit)이다. 정렬 메모리 힙이 필요한 경우 추가적으로 제한없이 데이터베이스 공유 메모리를 사용할 수 있다.

 

9. AWE 지원이 사용되지 않음(Windows)

  - 64비트 운영체제 이전, DB2 초기버전에서는 가상주소공간을 초과하여 추가적인 물리적 메모리를 사용하기 위해서 32비트 Db2 서버를 사용할 수 있는 AWE기능을 지원했다. 그러나 64비트 플랫폼 도입으로 AWE 기능 사용의 요구가 줄어들게 되었다. 따라서 DB2 9에서는 DB2_AWE 레지스트리 변수와 함께 AWE기능에 대한 지원을 하지 않는다.

 

 

 

(*.95.187.237)