閱讀568 返回首頁    go 阿裏雲 go 技術社區[雲棲]


DB2監控

快照監視器

快照監視器概述

   在數據庫管理器級別,可以通過數據庫管理器配置參數來設置監視器開關。
   要查看所有用於開關設置的設置選項,使用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|

#快照監視器案例

最後更新:2017-04-13 18:01:33

  上一篇:go 支付寶都在用的安全工具已上架,你還等什麼?
  下一篇:go 互聯網醫療未達充分市場化狀態卻已降溫 投資機構看好醫療服務創新