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"