반응형
Snapshot을 이용한 데이터 베이스 모니터링 방법은 DB2에서 가장 오래된 방법이다. 

V82. 부터 제공해주는 Snapshot Table Function이나 , V9.1 이후 부터 제공해 주는 sysibmadm 의 administrator view는 이 스냅샷 정보를 쉽게 보여주고 있는 것이라고 판단하면 된다.

스냅샷을 이용하여 데이터 베이스 모니터링을 하기 위해서는 권한 및 모니터링 스위치가 ON 되어 있어야 한다.

스냅샷을 이용하여 데이터 베이스를 모니터링 하기 위해서는 다음의 권한 중 한 가지 권한 이상을 획득하고 있어야 가능하다.

SYSADM / SYSCTRL / SYSMAINT / SYSMON

위의 권한을 획득한 유저가 O/S상에 접속하여 db2 get snapshot 명령을 수행하면 데이터 베이스 상태를 확인할 수 있다.

그리고 스냅샷을 이용하여 데이터 베이스 정보를 확인하기 위해서는 Monitor Switch가 ON 되어 있는 부분에 대해서만 확인이 가능하다.

모니터 스위치는 데이터베이스 레벨 또는 세션레벨에서 ON 시키는 것이 가능하다.

사용할 수 있는 모니터 스위치의 종류는 다음의 명령어를 이용하여 쉽게 확인이 가능하다.

/home/db2singl/sqllib/include]$ db2 get dbm cfg | grep DFT
 Default charge-back account           (DFT_ACCOUNT_STR) = 
   Buffer pool                         (DFT_MON_BUFPOOL) = OFF         -- 버퍼풀 모니터링
   Lock                                   (DFT_MON_LOCK) = OFF             -- Lock 모니터링
   Sort                                   (DFT_MON_SORT) = OFF              -- Sort 모니터링
   Statement                              (DFT_MON_STMT) = OFF          -- SQL 모니터링
   Table                                 (DFT_MON_TABLE) = OFF            -- 테이블 사용량 모니터링
   Timestamp                         (DFT_MON_TIMESTAMP) = ON     -- 시간관련 모니터링값 사용 
   Unit of work                            (DFT_MON_UOW) = OFF            -- Unit Of Work 단위의 처리량 모니터링
 Default database path                       (DFTDBPATH) = /home/db2singl

모니터 스위치를 ON 또는 OFF를 시키기 위한 방법

- 데이터 베이스 Level

   db2 update dbm cfg using DFT_MON_BUFPOOL ON  /  db2 update dbm cfg using DFT_MON_BUFPOOL OFF

- 세션 Level

    db2 update monitor switches using bufferpool on /  db2 update monitor switches using bufferpool off

     옵션들 : BUFFERPOOL / LOCK / SORT / STATEMENT / TABLE / TIMESTAMP / UOW


스냅샷 명령어는 다음을 이용하여 쉽게 확인이 가능하다.

V9.1 

/home/db2singl]$ db2 ? get snapshot
GET SNAPSHOT FOR {DATABASE MANAGER | ALL [DCS] DATABASES |
ALL [DCS] APPLICATIONS | ALL BUFFERPOOLS | [DCS] APPLICATION
{APPLID appl-id | AGENTID appl-handle} | FCM FOR ALL DBPARTITIONNUMS |
LOCKS FOR APPLICATION {APPLID appl-id | AGENTID appl-handle} |
{ALL | [DCS] DATABASE | [DCS] APPLICATIONS | TABLES |
TABLESPACES | LOCKS | BUFFERPOOLS | DYNAMIC SQL [write to file]}
ON database-alias} [AT DBPARTITIONNUM db-partition-number | GLOBAL]

위에 나온것을 이쁘게 정리해 보면 ..

GET SNAPSHOT FOR {   DATABASE MANAGER          -- 인스턴스 모니터링   
                                    | ALL [DCS] DATABASES     -- 활성화 되어 있는 모든 데이터 베이스 
                                    |ALL [DCS] APPLICATIONS 
                                    | ALL BUFFERPOOLS 
                                    | [DCS] APPLICATION { APPLID appl-id 
                                                                        | AGENTID appl-handle} 
                                    | FCM FOR ALL DBPARTITIONNUMS 
                                    |LOCKS FOR APPLICATION {APPLID appl-id 
                                                                               | AGENTID appl-handle} 
                                    |{ ALL | [DCS] DATABASE 
                                               | [DCS] APPLICATIONS 
                                               | TABLES 
                                               |TABLESPACES 
                                               | LOCKS 
                                               | BUFFERPOOLS 
                                               | DYNAMIC SQL [write to file]}
ON database-alias } [AT DBPARTITIONNUM db-partition-number | GLOBAL]

기본적으로 Snapshot으로 뜨는 정보들은 DB2에서 제공해 주는 모니터링 지표들을 보여준다.
모니터링 지표 및 해당 값들을 확인해 보려면 DB2 서버상의 ~sqllib/include/sqlmon.h 파일을 열어보면 쉽게 확인이 가능하다.

그리고 sqlmon.h 파일에 나온 모니터링 지표들을 DB2 정보센터에서 조회해 보면 해당 지표가 나타내는 값이 무엇이며, 누적데이터 인지, Count성 지표들인지 확인이 가능하다.

그리고 보여주는 모니터링 요소 들이 DB2 버젼에 따라서 Database Manager 또는 Database 또는 Application Level로 변경되어서 보여지는 경우도 있으므로, 필요한 부분은 그때 그때 확인을 해 보아야 한다.

스냅샷을 한번 수행 후 나오는 값을 이용하여 확인 하는 방법을 파악해 보자

/home/db2singl]$ db2 get snapshot for database manager

            Database Manager Snapshot

Node type                                      = Enterprise Server Edition with local and remote clients
Instance name                                  = db2singl
Number of database partitions in DB2 instance  = 1
Database manager status                        = Active

Product name                                   = DB2 v9.1.0.3
Service level                                  = s070719 (MI00202)

Private Sort heap allocated                    = 0
Private Sort heap high water mark              = 0
Post threshold sorts                           = Not Collected
Piped sorts requested                          = 0
Piped sorts accepted                           = 0

Start Database Manager timestamp               = 12/16/2009 14:54:50.382422
Last reset timestamp                           =
Snapshot timestamp                             = 12/16/2009 15:03:48.158082

Remote connections to db manager               = 3
Remote connections executing in db manager     = 0
Local connections                              = 1
Local connections executing in db manager      = 0
Active local databases                         = 1

High water mark for agents registered          = 5
High water mark for agents waiting for a token = 0
Agents registered                              = 5
Agents waiting for a token                     = 0
Idle agents                                    = 0

Committed private Memory (Bytes)               = 720896

Switch list for db partition number 0
Buffer Pool Activity Information  (BUFFERPOOL) = OFF
Lock Information                        (LOCK) = ON  12/16/2009 15:03:40.131328
Sorting Information                     (SORT) = OFF
SQL Statement Information          (STATEMENT) = OFF
Table Activity Information             (TABLE) = OFF
Take Timestamp Information         (TIMESTAMP) = ON  12/16/2009 14:54:50.382422
Unit of Work Information                 (UOW) = OFF

Agents assigned from pool                      = 2
Agents created from empty pool                 = 6
Agents stolen from another application         = 0
High water mark for coordinating agents        = 5
Max agents overflow                            = 0
Hash joins after heap threshold exceeded       = 0

Total number of gateway connections            = 0
Current number of gateway connections          = 0
Gateway connections waiting for host reply     = 0
Gateway connections waiting for client request = 0
Gateway connection pool agents stolen          = 0

Memory usage for database manager:

    Memory Pool Type                           = Database Monitor Heap
       Current size (bytes)                    = 327680
       High water mark (bytes)                 = 327680
       Configured size (bytes)                 = 393216

    Memory Pool Type                           = Other Memory
       Current size (bytes)                    = 1966080
       High water mark (bytes)                 = 1966080
       Configured size (bytes)                 = 26869760

위의 스냅샷 정보를 확인해 보면 현재 접속되어 있는 Agent 개수 및 메모리 사용량, 모니터링 스위치 등의 정보에 대해서 쉽게 확인이 가능함을 알 수 있다.

이 중에서 유용하다고 볼수 있는 것은 현재 접속되어 있는 Agent관련 정보나, 최대 얼마나 접속이 이루어 졌었는가 하는 High Water Mark 값들이다.  추후 이 값들을 기준으로 파라메터 설정을 하는데 참고를 할 수 있을 것이다.

위에 보이는 데이터들 중에서 Local connections 가 나타내는 바가 뭔지 확실히 알고자 한다면 , sqlmon.h 파일의 Local Connections에 대해서 확인해 보면 된다.

다음은 sqlmon.h 파일안의 내용중 일부이다.

#define SQLM_ELM_PIPED_SORTS_ACCEPTED  383 /* # of piped sorts accepted by SLS*/
#define SQLM_ELM_DL_CONNS            384 /* number of conns deadlocked        */
#define SQLM_ELM_REM_CONS_IN         385 /* Remote connects to target DB2     */
#define SQLM_ELM_REM_CONS_IN_EXEC    386 /* Remote connects to target exec DB2*/
#define SQLM_ELM_LOCAL_CONS          387 /* Current Local Connections         */
#define SQLM_ELM_LOCAL_CONS_IN_EXEC  388 /* Local connects curr exec in DB2   */
#define SQLM_ELM_CON_LOCAL_DBASES    389 /* Local databases w/current connects*/

위의 지표명이 SQLM_ELM_LOCAL_CONS로 나타내어 지는 것을 확인 할 수 있을 것이다.

그럼 앞의 부분을 빼고 LOCAL_CONS 부분만 DB2 정보센터에서 확인해 보면 해당 지표가 어떤 값을 나타내는지 쉽게 확인이 가능하다.

다음은 DB2 엉보센터에서 조회한 내용임


local_cons - Local Connections monitor element

Element identifier
local_cons
Element type
gauge
Table 1. Snapshot Monitoring Information
Snapshot LevelLogical Data GroupingMonitor Switch
Database Manager db2 Basic
Description
The number of local applications that are currently connected to a database within the database manager instance being monitored.


위와 같이 Snapshot을 이용하여 정보를 확인 한 후 해당 지표가 무엇을 나타내는지 알려면 위와 같은 방법을 이용하면 된다.


위의 정보를 자세히 보면 Element Type이라는 부분을 확인 할 수 있다.

local_cons 는 Element Type이 gauge 이다. 이것은 해당 지표가 현재의 지표값임을 나타내는 것이다.

현재 값이라 함은 데이터 베이스가 Start 된 이후의 누적된 정보가 아니라 Snapshot 수행 시점의 누적되지 않은 값을 표현해 주는 것이다.

다음은 Element Type의 종류 및 설명이다.

Counter : 데이터 베이스가 기동된 이후 해당 지표가 발생된 횟수. 대 부분의 Counter성 지표들은 reset monitor를 하면 초기
              화 된다.
Gauge : 현재 상태 값.
Water Mark : 해당 지표값이 최대 또는 최소로 되었던 시점의 값
Information : 단순 참조용 정보 
Timestamp or Time : 제공해 주는 정보가 시간 값인 경우

그럼 각각의 예를 한 번 들어서 쉽게 이해를 할 수 있도록 해 보자

deadlocks : counter 성 지표로 데이터 베이스 기동 이후 deadlock이 발생된  횟 수  
locks_waiting : gauge 성 지표로 현재 데이터 베이스에서 Lock을 획득하기 위하여 대기 하고 있는 Application의 개수
agents_top  : Water Mark성 지표로 데이터 베이스 기동 후 Agent가 생성된 최고 값
package_name : Information 지표로 수행된 SQL의 패키지 이름을 나타냄
uow_start_time : Timestamp 지표로 Unit Of Work 시작 시간을 나타냄

이제는 Element Type에 대해서 어느 정도 이해가 되었으리라 생각이 되고, 다른 부분에 대해서 알아 보도록 하자.

위의 정보센터에서 본 정보들 중에 Snapshot Level 부분이 존재 한다.

Snapshot Level은 해당 지표를 확인하기 위해서는 Snapshot 명령을 어떻게 수행해야 하는지 판단 할 수 있는 좋은 정보이다.

Snapshot Level이 Database Manager로 되어 있으면 db2 get snapshot for database manager를 수행하면 해당 지표 값을 확인 할 수 있으며 , Snapshot Level이 Database로 되어 있으면 db2 get snapshot for all database 또는 db2 get snapshot for database on DB이름 명령을 수행하면 된다.

마찬가지로 Application으로 되어 있으면 Application 관련 스냅샷 명령을 수행하면 된다.


여기까지 간단하게 Snapshot을 이용하여 데이터 베이스를 모니터링 하는 방법에 대해서 설명을 해 보았다.

다음에는 스냅샷 테이블 펑션을 이용하여 모니터링 하는 방법에 대해서 알아 보도록 하자.


반응형

+ Recent posts