寻求适用于DB2 z/OS的进程监控SQL查询方案
DB2 z/OS 活跃进程监控SQL查询语句
DB2 z/OS和LUW的系统监控视图差异很大,你之前用的sysibmadm.mon_current_sql和sysibmadm.long_running_sql只适用于LUW,下面是几个适用于DB2 z/OS监控活跃进程的常用SQL:
1. 监控当前活跃执行/等待的进程及语句
这个查询通过关联SYSIBM.SYSPROCESS(进程信息)和SYSIBM.SYSSTMT(当前执行语句),筛选出正处于执行或等待状态的进程,并按运行时长排序:
SELECT SUBSTR(P.PROCID, 1, 10) AS PROC_ID, SUBSTR(P.AUTHID, 1, 15) AS AUTH_ID, SUBSTR(P.PROGRAM, 1, 20) AS APPL_NAME, P.STATUS AS PROC_STATUS, TIMESTAMPDIFF(2, CHAR(CURRENT_TIMESTAMP - P.STARTDB2)) AS ELAPSED_MIN, SUBSTR(S.STMTTEXT, 1, 200) AS CURRENT_STMT FROM SYSIBM.SYSPROCESS P LEFT JOIN SYSIBM.SYSSTMT S ON P.PROCID = S.PROCID WHERE P.STATUS IN ('EXECUTING', 'WAITING') ORDER BY ELAPSED_MIN DESC FETCH FIRST 5 ROWS ONLY;
字段说明:
PROC_ID:进程唯一标识AUTH_ID:执行该进程的用户IDAPPL_NAME:发起进程的应用程序名PROC_STATUS:进程状态(EXECUTING=执行中,WAITING=等待资源)ELAPSED_MIN:进程已运行分钟数CURRENT_STMT:当前正在执行的SQL语句片段(截取前200字符)
2. 监控长时间运行的活跃线程
如果需要重点关注运行时间较长的线程,可以用这个查询,关联SYSIBM.SYSTHREAD和SYSIBM.SYSSTMT:
SELECT SUBSTR(T.THREADID, 1, 12) AS THREAD_ID, SUBSTR(T.AUTHID, 1, 15) AS AUTH_ID, SUBSTR(T.PROGRAM, 1, 20) AS PROGRAM_NAME, T.STATUS AS THREAD_STATUS, TIMESTAMPDIFF(2, CHAR(CURRENT_TIMESTAMP - T.CREATION_TIME)) AS RUN_TIME_MIN, SUBSTR(S.STMTTEXT, 1, 200) AS EXECUTING_STMT FROM SYSIBM.SYSTHREAD T LEFT JOIN SYSIBM.SYSSTMT S ON T.THREADID = S.THREADID WHERE T.STATUS = 'ACTIVE' AND TIMESTAMPDIFF(2, CHAR(CURRENT_TIMESTAMP - T.CREATION_TIME)) > 5 -- 筛选运行超5分钟的线程 ORDER BY RUN_TIME_MIN DESC;
注意事项
- 执行这些查询需要拥有
SYSIBM.SYSPROCESS、SYSIBM.SYSSTMT、SYSIBM.SYSTHREAD等系统表的SELECT权限 TIMESTAMPDIFF的第一个参数可调整:1=秒,2=分钟,3=小时,按需修改SUBSTR的截取长度可以根据实际需求调整,避免截断关键语句信息
内容的提问来源于stack exchange,提问作者Dragan Ognjenović
相关产品推荐
相关产品推荐

