If you’re mourning the loss of “RESET MONITOR ALL”, there are a number of ways you can address that. Ideally, you’d use this approach: http://www.ibm.com/developerworks/data/library/techarticle/dm-1009db2monitoring1/, but there are some arguments for using MONREPORT over that in some ways. One argument is that MONREPORT is built-in and you don’t have to add objects to make it work. The disadvantages are a bit less flexibility and the inability to use SQL to capture information. Though if it’s the old snapshot interfaces you miss, then the output from MONREPORT is more similar in a lot of ways.
I talk as though the snapshot monitors no longer exist – they do, but he lower overhead of more recent monitoring tools is worth leaving them behind.
What is MONREPORT
MONREPORT is a built-in module for DB2 LUW, starting in version 9.7. (A module is a group of related stored procedures and other objects) Most of the MONREPORT procedures take an input parameter of a number of seconds. They then take note of the values for a number of performance related metrics and sleep for the specified number of seconds. Then the metrics are captured again, and the before values are subtracted from the after values to show only the numbers represented by what happened in the specified time interval. An easily human-readable report is then generated showing the metrics during the specified interval.
This is useful because simply querying the MON_GET table functions and SYSIBMADM views/tables will get you just the values since the last database restart. Sometimes you want to do analyses based on everything that has happened since the last database restart. Other times you really need to know what’s happening in a particular 5 minute or even one-hour interval.
MONREPORT is generally focused on database performance, though in several areas. In DB2 10.5, the following stored procedures can be called to get informaion from MONREPORT:
- DBSUMMARY – provides values for key performance indicators across the database. Optional input is simply the monitoring interval. See the IBM DB2 Knowledge Center entry on DBSUMMARY for more details.
- CONNECTION – provides values for preformance indicators specific to each connection. Input is the monitoring interval and optionally the application handle of a single connection if you want information only returned for one connection. See the IBM DB2 Knowledge Center entry on CONNECTION for more details.
- CURRENTAPPS – provides point-in-time values for performance indicators for applications at the moment it is run. No inputs. See the IBM DB2 Knowledge Center entry on CURRENTAPPS for more details.
- CURRENTSQL – provides details on current SQL executing – including it’s own SQL. Optional input of the member is only valid in a PureScale environment. See the IBM DB2 Knowledge Center entry on CURRENTSQL for more details.
- LOCKWAIT – provides details on lockwaits currently in progress. No inputs. See the IBM DB2 Knowledge Center entry on LOCKWAIT for more details.
- PKGCACHE – provides details on statements in the package cache. Note this is not my favorite way of accessing package cache information (MON_GET_PKG_CACHE_STMT is). Inputs are optional and include: an interval in which the statements in the package cache have been updated, a section type if you want to limit data to either dynamic or static SQL, and a member if you’re using PureScale. See the IBM DB2 Knowledge Center entry on PKGCACHE for more details.
How to use MONREPORT
I’m going to cover the use of DBSUMMARY. The others are similar. To use an interval of 60 seconds, use this syntax:
db2 "CALL MONREPORT.DBSUMMARY(60)"
If you think it seems to be hanging, make sure you specified the correct interval. For all of the MONREPORT procedures that take an interval, except for the PKGCACHE one, it will take a bit more than the interval you’ve specified to return the metrics.
This is a sample of the output:
$ db2 connect to sample Database Connection Information Database server = DB2/LINUXX8664 10.5.4 SQL authorization ID = DB2INST1 Local database alias = SAMPLE $ db2 "call monreport.dbsummary(60)" Result set 1 -------------- TEXT -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- Monitoring report - database summary -------------------------------------------------------------------------------- Database: SAMPLE Generated: 11/24/2014 19:10:03 Interval monitored: 60 ================================================================================ Part 1 - System performance Work volume and throughput -------------------------------------------------------------------------------- Per second Total --------------------- ----------------------- TOTAL_APP_COMMITS 0 0 ACT_COMPLETED_TOTAL 4 271 APP_RQSTS_COMPLETED_TOTAL 0 5 TOTAL_CPU_TIME = 48751 TOTAL_CPU_TIME per request = 9750 Row processing ROWS_READ/ROWS_RETURNED = 0 (73/271) ROWS_MODIFIED = 0 Wait times -------------------------------------------------------------------------------- -- Wait time as a percentage of elapsed time -- % Wait time/Total time --- ---------------------------------- For requests 0 137/60508 For activities 0 168/60532 -- Time waiting for next client request -- CLIENT_IDLE_WAIT_TIME = 1944 CLIENT_IDLE_WAIT_TIME per second = 32 -- Detailed breakdown of TOTAL_WAIT_TIME -- % Total --- --------------------------------------------- TOTAL_WAIT_TIME 100 137 I/O wait time POOL_READ_TIME 0 0 POOL_WRITE_TIME 0 0 DIRECT_READ_TIME 43 59 DIRECT_WRITE_TIME 0 0 LOG_DISK_WAIT_TIME 0 0 LOCK_WAIT_TIME 0 0 AGENT_WAIT_TIME 0 0 Network and FCM TCPIP_SEND_WAIT_TIME 0 0 TCPIP_RECV_WAIT_TIME 0 0 IPC_SEND_WAIT_TIME 0 0 IPC_RECV_WAIT_TIME 0 0 FCM_SEND_WAIT_TIME 0 0 FCM_RECV_WAIT_TIME 0 0 WLM_QUEUE_TIME_TOTAL 0 0 CF_WAIT_TIME 0 0 RECLAIM_WAIT_TIME 0 0 SMP_RECLAIM_WAIT_TIME 0 0 Component times -------------------------------------------------------------------------------- -- Detailed breakdown of processing time -- % Total ---------------- -------------------------- Total processing 100 60371 Section execution TOTAL_SECTION_PROC_TIME 0 263 TOTAL_SECTION_SORT_PROC_TIME 0 9 Compile TOTAL_COMPILE_PROC_TIME 0 3 TOTAL_IMPLICIT_COMPILE_PROC_TIME 0 0 Transaction end processing TOTAL_COMMIT_PROC_TIME 0 0 TOTAL_ROLLBACK_PROC_TIME 0 0 Utilities TOTAL_RUNSTATS_PROC_TIME 0 0 TOTAL_REORGS_PROC_TIME 0 0 TOTAL_LOAD_PROC_TIME 0 0 Buffer pool -------------------------------------------------------------------------------- Buffer pool hit ratios Type Ratio Formula --------------- --------------- ---------------------------------------------- Data 100 (1-(0+0-0)/(28+0)) Index 100 (1-(0+0-0)/(24+0)) XDA 0 (1-(0+0-0)/(0+0)) COL 0 (1-(0+0-0)/(0+0)) LBP Data 100 (28-0)/(28+0) LBP Index 0 (0-0)/(24+0) LBP XDA 0 (0-0)/(0+0) LBP COL 0 (0-0)/(0+0) GBP Data 0 (0 - 0)/0 GBP Index 0 (0 - 0)/0 GBP XDA 0 (0 - 0)/0 GBP COL 0 (0 - 0)/0 I/O -------------------------------------------------------------------------------- Buffer pool reads POOL_DATA_L_READS = 28 POOL_TEMP_DATA_L_READS = 0 POOL_DATA_P_READS = 0 POOL_TEMP_DATA_P_READS = 0 POOL_ASYNC_DATA_READS = 0 POOL_INDEX_L_READS = 24 POOL_TEMP_INDEX_L_READS = 0 POOL_INDEX_P_READS = 0 POOL_TEMP_INDEX_P_READS = 0 POOL_ASYNC_INDEX_READS = 0 POOL_XDA_L_READS = 0 POOL_TEMP_XDA_L_READS = 0 POOL_XDA_P_READS = 0 POOL_TEMP_XDA_P_READS = 0 POOL_ASYNC_XDA_READS = 0 POOL_COL_L_READS = 0 POOL_TEMP_COL_L_READS = 0 POOL_COL_P_READS = 0 POOL_TEMP_COL_P_READS = 0 POOL_ASYNC_COL_READS = 0 Buffer pool pages found POOL_DATA_LBP_PAGES_FOUND = 28 POOL_ASYNC_DATA_LBP_PAGES_FOUND = 0 POOL_INDEX_LBP_PAGES_FOUND = 0 POOL_ASYNC_INDEX_LBP_PAGES_FOUND = 0 POOL_XDA_LBP_PAGES_FOUND = 0 POOL_ASYNC_XDA_LBP_PAGES_FOUND = 0 POOL_COL_LBP_PAGES_FOUND = 0 POOL_ASYNC_COL_LBP_PAGES_FOUND = 0 Buffer pool writes POOL_DATA_WRITES = 0 POOL_XDA_WRITES = 0 POOL_INDEX_WRITES = 0 POOL_COL_WRITES = 0 Direct I/O DIRECT_READS = 592 DIRECT_READ_REQS = 16 DIRECT_WRITES = 0 DIRECT_WRITE_REQS = 0 Log I/O LOG_DISK_WAITS_TOTAL = 0 Locking -------------------------------------------------------------------------------- Per activity Total ------------------------------ ---------------------- LOCK_WAIT_TIME 0 0 LOCK_WAITS 0 0 LOCK_TIMEOUTS 0 0 DEADLOCKS 0 0 LOCK_ESCALS 0 0 Routines -------------------------------------------------------------------------------- Per activity Total ------------------------ ------------------------ TOTAL_ROUTINE_INVOCATIONS 1 290 TOTAL_ROUTINE_TIME 222 60271 TOTAL_ROUTINE_TIME per invocation = 207 Sort -------------------------------------------------------------------------------- TOTAL_SORTS = 4 SORT_OVERFLOWS = 0 POST_THRESHOLD_SORTS = 0 POST_SHRTHRESHOLD_SORTS = 0 Network -------------------------------------------------------------------------------- Communications with remote clients TCPIP_SEND_VOLUME per send = 0 (0/0) TCPIP_RECV_VOLUME per receive = 0 (0/0) Communications with local clients IPC_SEND_VOLUME per send = 182 (365/2) IPC_RECV_VOLUME per receive = 231 (694/3) Fast communications manager FCM_SEND_VOLUME per send = 0 (0/0) FCM_RECV_VOLUME per receive = 0 (0/0) Other -------------------------------------------------------------------------------- Compilation TOTAL_COMPILATIONS = 2 PKG_CACHE_INSERTS = 15 PKG_CACHE_LOOKUPS = 16 Catalog cache CAT_CACHE_INSERTS = 5 CAT_CACHE_LOOKUPS = 9 Transaction processing TOTAL_APP_COMMITS = 0 INT_COMMITS = 0 TOTAL_APP_ROLLBACKS = 0 INT_ROLLBACKS = 0 Log buffer NUM_LOG_BUFFER_FULL = 0 Activities aborted/rejected ACT_ABORTED_TOTAL = 0 ACT_REJECTED_TOTAL = 0 Workload management controls WLM_QUEUE_ASSIGNMENTS_TOTAL = 0 WLM_QUEUE_TIME_TOTAL = 0 DB2 utility operations -------------------------------------------------------------------------------- TOTAL_RUNSTATS = 0 TOTAL_REORGS = 0 TOTAL_LOADS = 0 ================================================================================ Part 2 - Application performance drill down Application performance database-wide -------------------------------------------------------------------------------- TOTAL_CPU_TIME TOTAL_ TOTAL_APP_ ROWS_READ + per request WAIT_TIME % COMMITS ROWS_MODIFIED ---------------------- ----------- ------------- ---------------------------- 9750 0 0 73 Application performance by connection -------------------------------------------------------------------------------- APPLICATION_ TOTAL_CPU_TIME TOTAL_ TOTAL_APP_ ROWS_READ + HANDLE per request WAIT_TIME % COMMITS ROWS_MODIFIED ------------- ------------------- ----------- ------------- ------------- 74 9750 0 0 73 Application performance by service class -------------------------------------------------------------------------------- SERVICE_ TOTAL_CPU_TIME TOTAL_ TOTAL_APP_ ROWS_READ + CLASS_ID per request WAIT_TIME % COMMITS ROWS_MODIFIED -------- ------------------- ----------- ------------- ------------- 4 0 0 0 0 11 0 0 0 0 12 0 0 0 0 13 9750 0 0 73 Application performance by workload -------------------------------------------------------------------------------- WORKLOAD_ TOTAL_CPU_TIME TOTAL_ TOTAL_APP_ ROWS_READ + NAME per request WAIT_TIME % COMMITS ROWS_MODIFIED ------------- ---------------------- ----------- ------------- ------------- SYSDEFAULTADM 0 0 0 0 SYSDEFAULTUSE 9750 0 0 73 ================================================================================ Part 3 - Member level information - I/O wait time is (POOL_READ_TIME + POOL_WRITE_TIME + DIRECT_READ_TIME + DIRECT_WRITE_TIME). TOTAL_CPU_TIME TOTAL_ RQSTS_COMPLETED_ I/O MEMBER per request WAIT_TIME % TOTAL wait time ------ ---------------------- ----------- ---------------- ----------------- 0 9750 0 5 279 267 record(s) selected. Return Status = 0
I am not covering the output in detail here, because explaining it would be very much more in-depth than I want to get. Sample output for most of the procedures is available at the IBM DB2 Knowledge Center links supplied above.
Impact
While nearly all monitoring has some small impact, it’s on the lower side here since the stored procedures are mostly using the lowest available impacting monitoring interfaces of the MON_GET table functions. There must be some overhead in display and simple subtraction, but it must be less invasive than the old snapshot monitoring interfaces.
[…] you’re not familiar with MONREPORT, see my DB2 Basics entry on MONREPORT […]
This was very helpful, thanks!