DB2监控之SNAPSHOT MONITOR(快照监视器)


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"
db2