Example: Monitoring current system behavior at different levels using Db2 workload management table functions
Db2 workload management provides a number of table functions that you can use to obtain data about your workload management configuration.
Installing Db2 Version 9.5 or later creates a set of default workloads and service classes. Before deciding how to implement your own Db2 workload management solution, you can use the table functions to observe work being performed in the system in terms of the default workload occurrences, service classes, and activities.
SELECT SUBSTR(SERVICE_SUPERCLASS_NAME,1,19) AS SUPERCLASS_NAME,
SUBSTR(SERVICE_SUBCLASS_NAME,1,18) AS SUBCLASS_NAME,
SUBSTR(CHAR(MEMBER),1,4) AS MEMB,
SUBSTR(CHAR(COORD_MEMBER),1,4) AS COORDMEMB,
SUBSTR(CHAR(APPLICATION_HANDLE),1,7) AS APPHNDL,
SUBSTR(CHAR(WORKLOAD_NAME),1,22) AS WORKLOAD_NAME,
SUBSTR(CHAR(WORKLOAD_OCCURRENCE_ID),1,6) AS WLO_ID
FROM TABLE(WLM_GET_SERVICE_CLASS_WORKLOAD_OCCURRENCES('', '', -2)) AS SCINFO
ORDER BY SUPERCLASS_NAME, SUBCLASS_NAME, MEMB, APPHNDL, WORKLOAD_NAME, WLO_ID
SUPERCLASS_NAME SUBCLASS_NAME MEMB COORDMEMB APPHNDL WORKLOAD_NAME WLO_ID
------------------- ------------------ ---- --------- ------- -----------------------------
SYSDEFAULTUSERCLASS SYSDEFAULTSUBCLASS 0 0 1 SYSDEFAULTUSERWORKLOAD 1
SYSDEFAULTUSERCLASS SYSDEFAULTSUBCLASS 0 0 2 SYSDEFAULTUSERWORKLOAD 2
The results indicate that both workload occurrences were assigned to the SYSDEFAULTUSERWORKLOAD workload. The results also show that both workload occurrences were assigned to the SYSDEFAULTSUBCLASS service subclass in the SYSDEFAULTUSERCLASS service superclass and that both workload occurrences are from the same coordinator member (member 0).
SELECT SUBSTR(CHAR(APPLICATION_HANDLE),1,7) AS APPHNDL,
SUBSTR(CHAR(WORKLOAD_NAME),1,22) AS WORKLOAD_NAME,
SUBSTR(CHAR(WORKLOAD_OCCURRENCE_ID),1,6) AS WLO_ID,
SUBSTR(CHAR(SYSTEM_AUTH_ID),1,9) AS SYSAUTHID,
SUBSTR(CHAR(APPLICATION_NAME),1,15) AS APPLNAME
FROM TABLE(WLM_GET_SERVICE_CLASS_WORKLOAD_OCCURRENCES('', '', 0)) AS SCINFO
ORDER BY APPHNDL, WORKLOAD_NAME, WLO_ID
APPHNDL WORKLOAD_NAME WLO_ID SYSAUTHID APPLNAME
------- ---------------------- ------ --------- ---------------
1 SYSDEFAULTUSERWORKLOAD 1 LYNN accountspay
2 SYSDEFAULTUSERWORKLOAD 2 KATE businessobjects
SELECT SUBSTR(CHAR(COORD_MEMBER),1,5) AS COORD,
SUBSTR(CHAR(MEMBER),1,4) AS MEMB,
SUBSTR(CHAR(UOW_ID),1,5) AS UOWID,
SUBSTR(CHAR(ACTIVITY_ID),1,5) AS ACTID,
SUBSTR(CHAR(PARENT_UOW_ID),1,8) AS PARUOWID,
SUBSTR(CHAR(PARENT_ACTIVITY_ID),1,8) AS PARACTID,
SUBSTR(ACTIVITY_TYPE,1,9) AS ACTTYPE,
SUBSTR(CHAR(NESTING_LEVEL),1,7) AS NESTING
FROM TABLE(WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES(1, -2)) AS WLOACTS
ORDER BY MEMB, UOWID, ACTID
COORD MEMB UOWID ACTID PARUOWID PARACTID ACTTYPE NESTING
----- ---- ----- ----- -------- -------- -------- -------
0 0 1 3 - - CALL 0
0 0 1 5 1 3 READ_DML 1
0 1 1 5 - - READ_DML 1
0 2 1 5 - - READ_DML 1
0 3 1 5 - - READ_DML 1
The query results show that workload occurrence 1 is running two activities. One activity is a stored procedure (indicated by the activity type of CALL), and the other activity is a DML activity that performs a read (for example, a SELECT statement). The DML activity is nested in the stored procedure call. You can tell that the DML activity is nested because the parent unit of work identifier and parent activity identifier of the DML activity match the unit of work identifier and the activity identifier of the CALL activity. You can also tell that the DML activity is executing on database members 0, 1, 2, and 3. The parent identifier information is available only on the coordinator member.
SELECT D.APP_HANDLE,
D.MEMBER,
D.COORD_MEMBER,
D.LOCAL_START_TIME,
D.UOW_ID,
D.ACTIVITY_ID,
D.PARENT_UOW_ID,
D.PARENT_ACTIVITY_ID,
D.ACTIVITY_TYPE,
D.NESTING_LEVEL,
D.INVOCATION_ID,
D.ROUTINE_ID
FROM TABLE(MON_GET_ACTIVITY_DETAILS(65592, 1, 1, -2)) AS ACTDETAILS,
XMLTABLE (XMLNAMESPACES( DEFAULT 'http://www.ibm.com/xmlns/prod/db2/mon'),
'$details/db2_activity_details' PASSING XMLPARSE(DOCUMENT
ACTDETAILS.DETAILS) as "details"
COLUMNS "APP_HANDLE" BIGINT PATH 'application_handle',
"MEMBER" BIGINT PATH 'member',
"COORD_MEMBER" BIGINT PATH 'coord_member',
"LOCAL_START_TIME" VARCHAR(26) PATH 'local_start_time',
"UOW_ID" BIGINT PATH 'uow_id',
"ACTIVITY_ID" BIGINT PATH 'activity_id',
"PARENT_UOW_ID" BIGINT PATH 'parent_uow_id',
"PARENT_ACTIVITY_ID" BIGINT PATH 'parent_activity_id',
"ACTIVITY_TYPE" VARCHAR(10) PATH 'activity_type',
"NESTING_LEVEL" BIGINT PATH 'nesting_level',
"INVOCATION_ID" BIGINT PATH 'invocation_id',
"ROUTINE_ID" BIGINT PATH 'routine_id'
) AS D;
APP_HANDLE MEMBER COORD_MEMBER LOCAL_START_TIME UOW_ID ACTIVITY_ID
---------- ------ ------------ --------------------------- ------ -----------
65592 1 1 2009-04-07-18.39.42.549197 1 1
65592 0 1 2009-04-07-18.39.42.552763 1 1
PARENT_UOW_ID PARENT_ACTIVITY_ID ACTIVITY_TYPE NESTING_LEVEL INVOCATION_ID ROUTINE_ID
------------- ------------------ ------------- ------------- ------------- ----------
- - READ_DML 0 0 0
- - READ_DML 0 0 0
2 record(s) selected.
The table functions mentioned previously provide a high-level description of work that is running in the system. The information that these table functions provide regarding the status of the work is limited to an activity state such as EXECUTING. If you want to probe further to discover what exactly is occurring in a service class at a point in time, you can run the WLM_GET_SERVICE_CLASS_AGENTS table function.
SELECT SUBSTR(CHAR(APPLICATION_HANDLE),1,7) AS APPHANDLE,
SUBSTR(CHAR(MEMBER),1,4) AS MEMB,
SUBSTR(CHAR(AGENT_TID),1,9) AS AGENT_TID,
SUBSTR(AGENT_TYPE,1,11) AS AGENTTYPE,
SUBSTR(AGENT_STATE,1,10) AS AGENTSTATE,
SUBSTR(REQUEST_TYPE,1,14) AS REQTYPE,
SUBSTR(CHAR(UOW_ID),1,6) AS UOW_ID,
SUBSTR(CHAR(ACTIVITY_ID),1,6) AS ACT_ID
FROM TABLE(WLM_GET_SERVICE_CLASS_AGENTS('', '', 1, -2)) AS SCDETAILS
ORDER BY APPHANDLE, MEMB, AGENT_TID
APPHANDLE MEMB AGENT_TID AGENTTYPE AGENTSTATE REQTYPE UOW_ID ACT_ID
--------- ---- --------- ----------- ---------- --------------------------
1 0 3 COORDINATOR ACTIVE FETCH 1 5
1 0 4 PDBSUBAGENT ACTIVE SUBSECTION:1 1 5
1 1 2 PDBSUBAGENT ACTIVE SUBSECTION:2 1 5
The results show a coordinator agent and a subagent on member 0 and a subagent on member 1 operating on behalf of an activity with a unit of work identifier of 1 and an activity identifier of 5. The coordinator agent information indicates that the request is a fetch request.