1 快照監視器
DB2 SNAPSHOT MONITOR收集的數據存放在內存中,通過DBM級參數MON_HEAP_SZ設置存儲的空間大小。
DB2監視器可監控的內容:
- Buffer pool:讀和寫的次數,所用時間。
- Lock:保持鎖定數目、死鎖數目。
- Sort:所有堆的數目、溢出、排序性能。
- Statement:SQL語句的開始時間、停止時間、完成時間。
- Table:測量活動(讀行、寫行)
- Timestamp:記錄時間戳。
- Unit of work:工作單元的開始時間、結束時間、完成時間。
監視器要素:
- 計數器:用來保存活動或者事件發生次數的累計(例如,對於一個數據庫的已經執行的SQL語句的總次數)。計數器數值的增長貫穿監視器的生命周期:而在許多情況下,它有可能會被重置。
- 計量值:表明一個項目的當前值(例如,當前連接到數據庫的應用程序的數量)。與計數器值不同的是,Gauges(計量)的值可以變高或者變低;它們在任一被測量點的實時值通常取決於數據庫活動的級別。
- 高水位值:表明一個指標在監視開始以后所能達到的最大值或最小值(例如,util_heap_sz使用的最大值)。
- 信息要素:提供所有監視活動執行的細節信息(例如緩沖池名稱、數據庫名稱和別名、詳細路徑等等)。
- 時間戳:表明一個活動或者事件發生的日期和時間(例如第一次連接數據庫建立的日期和時間)。時間戳被看成是從1970年1月1日開始消逝的秒和微妙的數量的值。
- 時間要素:記錄時間被花費於執行一個活動或事件的成本(例如:進行排序操作的時間花費)。時間要素的值會以從活動或事件開始所流逝的秒和微妙的數量形式來表現。一些時間要素可以被重置 。
查看全局監視器開關是否開啟
[db2inst1]# db2 get dbm cfg | grep DFT_MON
Buffer pool (DFT_MON_BUFPOOL) = ON
Lock (DFT_MON_LOCK) = ON
Sort (DFT_MON_SORT) = ON
Statement (DFT_MON_STMT) = ON
Table (DFT_MON_TABLE) = ON
Timestamp (DFT_MON_TIMESTAMP) = ON
Unit of work (DFT_MON_UOW) = ON
查看應用級監視器開關是否開啟
[db2inst1]# db2 get monitor switches
Monitor Recording Switches
Switch list for member 0
Buffer Pool Activity Information (BUFFERPOOL) = ON 01/20/2022 20:55:09.399500
Lock Information (LOCK) = ON 01/20/2022 20:55:09.399500
Sorting Information (SORT) = ON 01/20/2022 20:55:09.399500
SQL Statement Information (STATEMENT) = ON 01/20/2022 20:55:09.399500
Table Activity Information (TABLE) = ON 01/20/2022 20:55:09.399500
Take Timestamp Information (TIMESTAMP) = ON 01/20/2022 20:55:09.399500
Unit of Work Information (UOW) = ON 01/20/2022 20:55:09.399500
開啟LOCK監視器
[db2inst1]# db2 update dbm cfg using DFT_MON_LOCK on #需要重啟實例生效
或者
[db2inst1]# db2 update dbm cfg using LOCK on
重置實例下所有計數器
[db2inst1]# db2 reset monitor all
重置某個數據庫的所有計數器
[db2inst1]# db2 reset monitor for [database | db][database alias]
2 使用get snapshot監控
查看幫助命令
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 MEMBER member-number | GLOBAL]
監視器級別 | 命令 | 說明 |
連接列表 |
list applications [show detail] |
當前連接至數據庫的所有應用程序的標識信息,該數據庫由在其上獲取快照的分區上的 DB2? 實例管理。 |
連接列表 |
list applications for database dbname [show detail] |
當前連接至指定數據庫的每個應用程序的標識信息。 |
連接列表 |
list dcs applications |
當前連接至數據庫的所有 DCS 應用程序的標識信息,該數據庫由在其上獲取快照的分區上的 DB2 實例管理。 |
數據庫管理器 |
get snapshot for dbm |
數據庫管理器級別信息,包括實例級別監視開關設置。 |
數據庫管理器 |
get dbm monitor switches |
實例級別監視開關設置。 |
數據庫 |
get snapshot for database on dbname |
數據庫的數據庫級別信息和計數器。僅當至少有一個應用程序已連接到數據庫時,才會返回此信息。 |
數據庫 |
get snapshot for all databases |
在分區上處於活動狀態的每個數據庫的數據庫級別信息和計數器。僅當至少有一個應用程序已連接到數據庫時,才會返回此信息。 |
數據庫 |
list active databases |
與每個活動數據庫的連接的數目。包括使用 ACTIVATE DATABASE 命令啟動但沒有連接的數據庫。 |
數據庫 |
get snapshot for dcs database on dbname |
特定 DCS 數據庫的數據庫級別信息和計數器。僅當至少有一個應用程序已連接到數據庫時,才會返回此信息。 |
數據庫 |
get snapshot for remote database on dbname |
特定聯合系統數據庫的數據庫級別信息和計數器。僅當至少有一個應用程序已連接到數據庫時,才會返回此信息。 |
數據庫 |
get snapshot for all remote databases |
分區上的每個活動聯合系統數據庫的數據庫級別信息和計數器。僅當至少有一個應用程序已連接到數據庫時,才會返回此信息。 |
應用程序 |
get snapshot for application applid appl-id |
應用程序級別信息,包括累積計數器、狀態信息和最近執行的 SQL 語句(如果設置了語句開關)。 |
應用程序 |
get snapshot for application agentid appl-handle |
應用程序級別信息,包括累積計數器、狀態信息和最近執行的 SQL 語句(如果設置了語句開關)。 |
應用程序 |
get snapshot for applications on dbname |
與分區中數據庫相連接的每個應用程序的應用程序級別信息。此信息包括累積計數器、狀態信息和最近執行的 SQL 語句(如果設置了語句開關)。 |
應用程序 |
get snapshot for all applications |
在分區中處於活動狀態的每個應用程序的應用程序級別信息。此信息包括累積計數器、狀態信息和最近執行的 SQL 語句(如果設置了語句開關)。 |
應用程序 |
get snapshot for dcs application applid appl-id |
應用程序級別信息,包括累積計數器、狀態信息和最近執行的 SQL 語句(如果設置了語句開關)。 |
應用程序 |
get snapshot for all dcs applications |
在分區中處於活動狀態的每個 DCS 應用程序的應用程序級別信息。此信息包括累積計數器、狀態信息和最近執行的 SQL 語句(如果設置了語句開關)。 |
應用程序 |
get snapshot for dcs application agentid appl-handle |
應用程序級別信息,包括累積計數器、狀態信息和最近執行的 SQL 語句(如果設置了語句開關)。 |
應用程序 |
get snapshot for dcs applications on dbname |
與分區中數據庫相連接的每個 DCS 應用程序的應用程序級別信息。此信息包括累積計數器、狀態信息和最近執行的 SQL 語句(如果設置了語句開關)。 |
應用程序 |
get snapshot for remote applications on dbname |
應用程序級別信息,包括累積計數器、狀態信息和最近執行的 SQL 語句(如果設置了語句開關)。 |
應用程序 |
get snapshot for all remote applications |
在分區中處於活動狀態的每個聯合系統應用程序的應用程序級別信息。此信息包括累積計數器、狀態信息和最近執行的 SQL 語句(如果設置了語句開關)。 |
表 |
get snapshot for tables on dbname |
每個與數據庫相連接的應用程序的數據庫級別和應用程序級別表活動信息。與數據庫相連接的應用程序已訪問的每個表在表級別的活動信息。需要表開關。 |
鎖 |
get snapshot for locks for application applid appl-id |
應用程序掛起的鎖定列表。鎖定等待信息需要鎖定開關。 |
鎖 |
get snapshot for locks for application agentid appl-handle |
應用程序掛起的鎖定列表。鎖定等待信息需要鎖定開關。 |
鎖 |
get snapshot for locks on dbname |
每個與數據庫相連接的應用程序的數據庫級別和應用程序級別鎖定信息。需要鎖定開關。 |
表空間 |
get snapshot for tablespaces on dbname |
有關數據庫的表空間活動的信息。需要緩沖池開關。還包括有關容器、停頓者和范圍的信息。此信息不受開關控制。 |
緩沖池 |
get snapshot for all bufferpools |
緩沖池活動計數器。需要緩沖池開關。 |
緩沖池 |
get snapshot for bufferpools on dbname |
指定數據庫的緩沖池活動計數器。需要緩沖池開關。 |
動態 SQL |
get snapshot for dynamic sql on dbname |
數據庫的 SQL 語句高速緩存中的時間點語句信息。該信息也可能來自遠程數據源。 |
3 使用表函數監控
表函數名稱 | 說明 |
SNAPSHOT_DBM | 數據庫管理器信息 |
SNAPSHOT_DATABASE | 數據庫信息,只有當至少有一個應用程序連接至數據庫時,才會返回信息 |
SNAPSHOT_APPL | 連接至分區上數據庫的應用程序上有關鎖等待的應用程序信息,包括累積計數器、狀態信息和最近執行的SQL語句(如果設置了語句監視器開關) |
SNAPSHOT_APPL_INFO | 每個連接至分區上數據庫的應用程序的常規應用程序標識信息 |
SNAPSHOT_LOCKWAIT | 有鎖等待連接至分區上數據庫的應用程序的應用程序信息 |
SNAPSHOT_STATEMENT | 有關連接至分區上數據庫的應用程序的語句的應用程序信息,包括最近執行的SQL語句(如果設置了語句監視器開關) |
SNAPSHOT_TABLE | 連接至數據庫的應用程序所訪問的每個表的表活動信息,需開啟表監視器開關 |
SNAPSHOT_LOCK | 數據庫級別上的鎖信息,以及每個連接至數據庫的應用程序在應用程序級別上的鎖信息,需開啟鎖監視器開關 |
SNAPSHOT_TBS | 數據庫級別上的表空間活動信息,每個連接至數據庫的應用程序在應用程序級別上的表空間活動信息,以及連接至數據庫的應用程序已訪問過的每個表空間Gina在表空間級別上的表空間活動信息。需開啟緩沖池監視器開關 |
SNAPSHOT_BP | 指定數據庫的緩沖池活動計數器,需開啟緩沖池監視器開關 |
SNAPSHOT_DYN_SQL | 監控數據庫的SQL語句高速緩存的某個時間點語句信息 |
使用方法:查看DBNAME數據庫的表監視器信息
db2 "select * from table(SNAPSHOT_TABLE('DBNAME', -1)) as T"
快照表函數有兩個輸入參數:
- VARCHAR(255),用於數據庫名稱。如果輸入NULL,就使用當前已連接的數據庫名稱。這個參數不能應用於只返回數據庫管理器信息的快照表函數(例如SNAPSHOT_DBM)。這樣的快照表函數只有一個分區號參數。對於以下的快照表函數列表,如果輸入NULL來表示使用當前已連接的數據庫,那么將得到實例中所有數據庫的快照信息:SNAPSHOT_DATABASE、SNAPSHOT_APPL、SNAPSHOT_APPL_INFO、SNAPSHOT_LOCKWAIT、SNAPSHOT_STATEMENT和SNAPSHOT_BP。
- SMALLINT,用於分區號。對於分區號參數,輸入整數(0和999之間的值)以對應需要監控的分區號。要捕獲當前已連接分區的快照,請輸入值-1或NULL。要捕獲全局快照,請輸入值-2。
4 性能管理視圖
監控視圖在SYSIBMADM模式下,以下展示最常用的視圖:
視圖名稱 | 說明 |
SYSIBMADM.APPLICATIONS | 數據庫中運行的應用 |
SYSIBMADM.APPL_PERFORMANCE | 每個應用中rows selected與rows read的比率 |
SYSIBMADM.BP_HITRATIO | 緩沖池的命中率 |
SYSIBMADM.BP_READ_IO | 緩沖池讀的信息 |
SYSIBMADM.BP_WRITE_IO | 緩沖池寫的信息 |
SYSIBMADM.CONTAINER_UTILIZATION | 表空間中容器的利用率信息 |
SYSIBMADM.LOCKS_HELD | 當前獲得的鎖的信息 |
SYSIBMADM.LOCKWAITS | 鎖等待的信息 |
SYSIBMADM.LOG_UTILIZATION | 日志利用率的信息 |
SYSIBMADM.LONG_RUNNING_SQL | 執行時間最長的SQL語句信息 |
SYSIBMADM.SNAPAGENT_MEMORY_POOL SYSIBMADM.SNAP_GET_AGENT_MEMORY_POOL |
代理級別的內存使用情況 |
SYSIBMADM.SNAPBP SYSIBMADM.SNAP_GET_BP_V95 |
緩沖池的基本信息 |
SYSIBMADM.SNAPDYN_SQL SYSIBMADM.SNAP_GET_DYN_SQL_V95 |
數據庫中動態SQL的執行 |
SYSIBMADM.SNAPLOCKWAIT SYSIBMADM.SNAP_GET_LOCKWAIT |
鎖等待的信息 |
SYSIBMADM.SNAPSTMT SYSIBMADM.SNAP_GET_STMT |
應用中SQL語句的執行情況 |
SYSIBMADM.SNAPTAB SYSIBMADM.SNAP_GET_TAB_V91 |
表的信息 |
SYSIBMADM.SNAPTAB_REORG SYSIBMADM.SNAP_GET_TAB_REORG |
重組信息 |
SYSIBMADM.SNAPTBSP SYSIBMADM.SNAP_GET_TBSP_V91 |
表空間信息 |
SYSIBMADM.TBSP_UTILIZATION | 表空間使用情況 |
SYSIBMADM.TOP_DYNAMIC_SQL | 消耗資源最多的SQL語句信息 |
使用方法:查看REORG的表信息
db2 "select * from SYSIBMADM.SNAPTAB_REORG"