DB2監控

水墨胭脂發表於2017-04-12

快照監視器

快照監視器概述

   在資料庫管理器級別,可以通過資料庫管理器配置引數來設定監視器開關。
   要檢視所有用於開關設定的設定選項,使用get dbm cfg | grep DFT_MON命令。

[db2inst1@db22 Desktop]$ db2 get dbm cfg| grep DFT_MON
   Buffer pool                         (DFT_MON_BUFPOOL) = OFF
   Lock                                   (DFT_MON_LOCK) = OFF
   Sort                                   (DFT_MON_SORT) = OFF
   Statement                              (DFT_MON_STMT) = OFF
   Table                                 (DFT_MON_TABLE) = OFF
   Timestamp                         (DFT_MON_TIMESTAMP) = ON
   Unit of work                            (DFT_MON_UOW) = OFF

要啟用或禁用資料庫管理器級別的監視器開關設定,使用UPDATE DBM CFG命令,並指定要修改的個別監視器開關。
  例如,以下命令關閉了DFT_MON_TIMESTAMP監視器,來終止時間戳記監視器資料的收集:

db2 update dbm cfg using DFT_MON_TIMESTAMP off

  每個連線至資料庫的應用程式(會話)都有其自己的監視器開關集,這些監視器開關與資料庫管理器和其他會話無關。應用程式(會話)在連線至資料庫時,從資料庫管理器上繼承它們的監視器開關設定。要檢視會話的所有監視器開關設定的設定選項,請使用 GET MONITOR SWITCHES命令。您可以使用UPDATE MONITOR SWITCHES命令來更改會話的監視器開關設定。

  例如,以下命令開啟LOCK監視器開關,從而啟用SNAPSHOT_LOCK快照表函式所使用的監視器元素的收集:

db2 update monitor switches using LOCK on

  SNAPSHOT Monitor(快照監視器)以計算器的形式提供累計資訊。快照資訊由一種特殊的資料結構提供,這種資料結構可以通過應用程式發出快照來檢查。由監視資料結構返回的資料根據表9-1中所定義的開關來設定。這些開關可以在例項(DBM)級別或應用程式會話級別(UPDATE MONITOR SWITCHES)上開啟或關閉。表9-1還包含執行快照時所提供的概要資訊,以及由Snapshot Monitor提供的基本資訊。

組別 所提供的資訊 監視器開關 DBM引數
排序 所用堆的數目、溢位、效能排序 SORT DFT_MON_SORT
鎖定 保持鎖定數目、死鎖數目 LOCK DFT_MON_LOCK
測量活動(讀行、寫行) TABLE DFT_MON_TABLE
緩衝區 讀和寫的次數,所用時間 BUFFERPOOL DFT_MON_BUFFERPOOL
工作單元 開始時間、結束時間、完成時間 UOW DFT_MON_UOW
SQL語句 開始時間、停止時間、語句標識 STATEMENT DFT_MON_STMP

在DBM(例項)配置引數中設定預設的開關值,將影響該例項中的所有資料庫。而且每個與資料庫相連線的session(會話)將繼承在DBM配置中所設定的預設開關值。

1.檢視監控開關設定

  在某種程度上,由於快照監視器開關控制著當一個快照被開啟時能夠收集到的資訊的型別和數量,因此,您應該在開始您的監視程式之前搞清楚哪些開關是開啟的而哪些是關閉的。要獲得這些資訊,最簡單的方法就是在CLP中執行GET MONITOR SWITCHES命令。在多分割槽資料庫環境下它的基本語法是:

GET MONITOR SWITCHES  <AT DBPARTITIONNUM [PartitonNum] >```

[db2inst1@db22 Desktop]$ db2 get monitor switches

        Monitor Recording Switches

Switch list for member 0 –資料庫分割槽號為0的開關列表
Buffer Pool Activity Information (BUFFERPOOL) = OFF –緩衝池活動資訊
Lock Information (LOCK) = OFF –鎖定資訊
Sorting Information (SORT) = OFF –排序資訊
SQL Statement Information (STATEMENT) = OFF –SQL語句資訊
Table Activity Information (TABLE) = OFF –表活動資訊
Take Timestamp Information (TIMESTAMP) = ON 04/12/2017 10:25:18.576712 –獲取時間戳記資訊
Unit of Work Information (UOW) = OFF –工作單元資訊

 &emsp;&emsp;從上面可以看到,TIMESTAMP這個快照監視器開關的狀態是ON,而其他的都是OFF。在這個開關狀態後面顯示的是這個開關開啟的精確的日期和時間。


####2.改變開關設定

UPDATE MONITOR SWITCHES USING [[SwitchID] ON | OFF, … ]

####3.獲取資料
&emsp;&emsp;當資料庫被啟用或者與資料庫的連線被建立時,快照顯示器就會自動的開始收集監視資料。但是,在希望能夠檢視被監視的資料之前,您必須選取一個快照(快照看起來就像是那個時間點上的監視要素的映像)。您可以通過呼叫`db2GETSnapshot()` API或者執行`GET SNAPSHOT`命令來得到快照。例9-2指明瞭這個命令的基本語法,Database Alias用來說明需要做快照監視器資訊的資料庫別名。
&emsp;&emsp;這兩種方法收集的資訊都儲存於監視器要素中(有時被認為是資料要素),每個要素被設計成儲存指定型別的資訊。下面列出的是可利用的監視器要素:
1. **計數器**
&emsp;&emsp;用來儲存活動或者事件發生次數的累計值(例如,對於一個資料庫已經執行的SQL語句的總次數)。計數器數值的增長貫穿監視器的生命週期;而在許多情況下,它有可能會被重置。
2.  **計量值**
&emsp;&emsp;表明一個專案的當前值(例如,當前連線到資料庫的應用程式的數量)。
&emsp;&emsp;與計數器不同的是,Gauges(計量)的值可以變高或者變低;它們在任一被測量點的實時值通常取決於資料庫活動的級別。
3. **高水位值**
&emsp;&emsp;表明一個指標在監視開始以後所能達到的最大值或最小值(例如,util_heap_sz使用的最大值)。
4. **資訊要素**
&emsp;&emsp;提供所有監視活動執行的細節資訊(例如緩衝池名稱、資料庫名稱和別名、詳細路徑等等)。
5. **時間戳**
&emsp;&emsp;表明一個活動或者事件發生的日期和時間(例如第一次連線資料庫建立的日期和時間)。
6. **時間要素**
&emsp;&emsp;記錄時間被花費於執行一個活動或時間的成本(例如:進行排序操作的時間花費)。時間要素的值會以從活動或事件開始所流逝的秒和微秒的數量形式來表現。一些時間要素可以被重置。
&emsp;&emsp;使用`GET SNAPSHOT`命令可以要求一個快照。在我們檢查Snapshot Monitor(快照監視器)的輸出之前,使我們可以選擇如何捕獲快照資訊。可以利用CLP介面去捕獲資料庫監視器快照。
&emsp;&emsp;拍快照時,有可能定義一個相關領域。當需要資料庫監視時,通常都有具體的需要。因此,對於特定的資料庫,如果有一個與併發性(鎖定)行為有關的問題,那麼可以規定鎖定級別。如果使用者關心所有訪問資料庫的應用程式,那麼就應當規定應用程式的級別。如果STATEMENT開關被開啟並在資料庫級別上拍了快照,那麼就能捕獲有關表的動態SQL語句的活動(INSERT/UPDATE/SELECT/DELETE)資訊。還能捕獲資料庫內每個表的資料庫活動資訊。可以提供以下級別的快照:
 - DBM(例項監視器)——捕獲活動例項的資訊
 - Database(資料庫)——捕獲所有資料庫或一個資料庫的資訊
 - Application(應用程式)——捕獲所有應用程式或單個應用程式的資訊
 - Table Space(表空間)——捕獲資料庫內各個表空間的資訊
 -Table(表)——捕獲資料庫內各個表的資訊
 - Lock(鎖)——捕獲使用資料庫的應用程式持有的各種鎖的資訊


**例9-2** GET SNAPSHOT命令的語法

db2 get snapshot for dbm
db2 get snapshot for database on dbname
db2 get snapshot for bufferpools on dbname
db2 get snapshot for tables on dbname
db2 get snapshot for locks on dbname
db2 get snapshot for applications on dbname
db2 get snapshot for dynamic on dbname

**例9-3 資料庫鎖定快照**

[db2inst1@db22 Desktop]$ db2 update monitor switches using lock on –開啟鎖定監視
DB20000I The UPDATE MONITOR SWITCHES command completed successfully.
—資料庫中做一些操作–
SAMPLE:select * from tb1

ID NAME
———– ——————–

      1 java                
      2 testincremental     
      3 incremental         
      4 now incre           
      5 no                  
      6 test my             
      7 test forward        

7 record(s) selected.

DB2INST1->SAMPLE:update name=`uodate` where id=7
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0104N An unexpected token “update” was found following
“BEGIN-OF-STATEMENT”. Expected tokens may include: “”.
SQLSTATE=42601
DB2INST1->SAMPLE:update tb1 set name=`njk` where id=7
DB20000I The SQL command completed successfully.
DB2INST1->SAMPLE:insert into tb1 values(8,`kl`)
DB20000I The SQL command completed successfully.
DB2INST1->SAMPLE:delete from tb1 where id=6
DB20000I The SQL command completed successfully.
——-操作完成—

[db2inst1@db22 Desktop]$ db2 get snapshot for locks on sample

        Database Lock Snapshot

Database name = SAMPLE
Database path = /home/db2inst1/db2inst1/NODE0000/SQL00001/MEMBER0000/ —–資料庫路徑
Input database alias = SAMPLE –輸入資料庫別名
Locks held = 0 –掛起的鎖定
Applications currently connected = 1 –當前已連線的應用程式
Agents currently waiting on locks = 0 –當前正在等待鎖的代理程式數
Snapshot timestamp = 04/12/2017 12:06:41.627770 –快照時間戳記

Application handle = 32 –應用程式控制程式碼
Application ID = *LOCAL.DB2.170412040416 –應用程式標識
Sequence number = 00001 –序號
Application name = db2dbctrld –應用程式名
CONNECT Authorization ID = DB2INST1 –CONNECT 授權標識
Application status = Connect Completed –應用程式狀態
Status change time = Not Collected –狀態更改時間
Application code page = 1208 –應用程式內碼表
Locks held = 0 –掛起的鎖定
Total wait time (ms) = 0 –總計等待時間(毫秒)

Application handle = 31
Application ID = *LOCAL.DB2.170412040415
Sequence number = 00001
Application name = db2lused
CONNECT Authorization ID = DB2INST1
Application status = Connect Completed
Status change time = Not Collected
Application code page = 1208
Locks held = 0
Total wait time (ms) = 0

Application handle = 30
Application ID = *LOCAL.DB2.170412040414
Sequence number = 00001
Application name = db2wlmd
CONNECT Authorization ID = DB2INST1
Application status = Connect Completed
Status change time = Not Collected
Application code page = 1208
Locks held = 0
Total wait time (ms) = 0

Application handle = 36
Application ID = *LOCAL.DB2.170412040420
Sequence number = 00001
Application name = db2evml_DB2DETAILDEA
CONNECT Authorization ID = DB2INST1
Application status = Connect Completed
Status change time = Not Collected
Application code page = 1208
Locks held = 0
Total wait time (ms) = 0

Application handle = 29
Application ID = *LOCAL.DB2.170412040413
Sequence number = 00001
Application name = db2taskd
CONNECT Authorization ID = DB2INST1
Application status = Connect Completed
Status change time = Not Collected
Application code page = 1208
Locks held = 0
Total wait time (ms) = 0

Application handle = 28
Application ID = *LOCAL.DB2.170412040412
Sequence number = 00001
Application name = db2stmm
CONNECT Authorization ID = DB2INST1
Application status = Connect Completed
Status change time = Not Collected
Application code page = 1208
Locks held = 0
Total wait time (ms) = 0

Application handle = 34
Application ID = *LOCAL.DB2.170412040418
Sequence number = 00001
Application name = db2pcsd
CONNECT Authorization ID = DB2INST1
Application status = Connect Completed
Status change time = Not Collected
Application code page = 1208
Locks held = 0
Total wait time (ms) = 0

Application handle = 27
Application ID = *LOCAL.db2inst1.170412040406
Sequence number = 00007
Application name = db2bp
CONNECT Authorization ID = DB2INST1
Application status = UOW Waiting
Status change time = Not Collected
Application code page = 1208
Locks held = 0
Total wait time (ms) = 0

Application handle = 33
Application ID = *LOCAL.DB2.170412040417
Sequence number = 00001
Application name = db2fw0
CONNECT Authorization ID = DB2INST1
Application status = Connect Completed
Status change time = Not Collected
Application code page = 1208
Locks held = 0
Total wait time (ms) = 0

####4.重置計數器
&emsp;&emsp;

RESET MONITOR ALL
RESET MONITOR FOR [DATABASE | DB] [Database Alias]

###利用表函式監控
&emsp;&emsp;
**表9-2 部分表函式列表**

| 快照表函式 | 返回的資訊 |
| --- | --- |
|SNAPSHOT_DBM|資料庫管理器資訊|
|SNAPSHOT_DATABASE|資料庫資訊,只有當至少有一個應用程式連線至資料庫時,才會返回資訊|
|SNAPSHOT_APPL|連線至分割槽上資料庫的應用程式上有關鎖等待的應用程式資訊,包括累積計數器、狀態資訊和最近執行的SQL語句 |
|SNAPSHOT_APPL_INFO|
|SNAPSHOT_LOCKWAIT|
|SNAPSHOT_STATEMENT||
|SNAPSHOT_TABLE||
|SNAPSHOT_LOCK||
|SNAPSHOT_TBS||
|SNAPSHOT_BP||
||SNAPSHOT_DYN_SQL||

**快照監視器資料組織**
&emsp;&emsp;所有的快照表函式都返回一張監視器資料表,其中的每一行代表一個正被監控的資料庫物件例項,而每一列代表一個監視器元素(監視器元素代表資料庫系統狀態的特定屬性)。


**捕獲監視器資料快照**
&emsp;&emsp;
**(1)連線至資料庫**

db2 connect to sample

**(2)確定需要捕獲的快照型別,以及需要監控的資料庫和分割槽**

db2 update dbm cfg using DFT_MON_TABLE on

**(3)使用希望的快照表函式發出查詢**
例如,以下是一個查詢,它捕獲有關當前已連線分割槽的SAMPLE資料庫的表活動資訊的快照:

db2 “select * from table (SNAPSHOT_TABLE(`SAMPLE`,-1)) as T”

快照表函式有兩個輸入引數:
- varchar(255):用於資料庫名稱,如果您輸入NULL,那麼就使用當前已連線的資料庫名稱

- smallint:用於分割槽號

###1.1.3效能管理檢視
&emsp;&emsp;使用這些管理檢視可以獲得與表函式和快照類似的監控資料
表9-3 部分管理檢視
|檢視名|模式名|描述|
| --- |---|---|
|APPLICATIONS|SYSIBMADM|
|APPL_PERFORMANCE|SYSIBMADM|
|BP_HITRATIO|SYSIBMADM|
|BP_READ_IO|SYSIBMADM|
|BP_WRITE_IO|SYSIBMADM|
|CONTAINER_UTILIZATION|SYSIBMADM|
|LONG_RUNNING_SQL|SYSIBMADM|
|SNAPAGENT_MEMORY_POOL  /SNAP_GET_AGENT_MEMORY_POOL|SYSIBMADM|
|SNAPBP / SNAP_GET_BP_V95|SYSIBMADM|

#快照監視器案例


相關文章