MON_GET_ROUTINE_EXEC_LIST 表函数 - 获取例程所执行的语句列表

MON_GET_ROUTINE_EXEC_LIST 表函数返回自激活数据库以来每个过程,外部函数,编译函数,编译触发器和调用的匿名块所执行的所有语句 (节) 的列表。

权限

需要下列其中一个权限:
  • 对例程的 EXECUTE 特权
  • DATAACCESS 权限
  • SQLADM 权限
  • DBADM 权限

缺省 PUBLIC 特权

语法

Read syntax diagramSkip visual syntax diagramMON_GET_ROUTINE_EXEC_LIST(routine_type ,routine_schema,routine_module_name,routine_name ,member)

模式为 SYSPROC。

例程参数

routine_type
类型为 CHAR (2) 的输入参数,用于指定要为其返回数据的例程或编译触发器的类型:
  • "P" 表示程序
  • "SP" 表示过程的特定名称
  • "F" 表示已编译的函数
  • "SF" 表示已编译函数的特定名称
  • "T" 表示已编译的触发器
  • "C" 表示 SQL PL 中动态预编译的复合 SQL 语句或 PL/SQL 中的匿名块
如果指定了 "P" , "F" , "T" 或 "C" 例程类型,并且未指定输入名称,那么将返回给定类型的所有例程。 如果例程类型为 "SP" 或 "SF" ,那么必须提供例程的特定名称。

如果例程类型为空字符串, NULL 或空白,那么将返回所有类型的所有例程。

routine_schema
类型为 VARCHAR (128) 的输入参数,用于指定例程或触发器的模式。 对于动态准备的复合 SQL 语句或匿名块,可以使用 MON_GET_SECTION_ROUTINES 表函数来确定模式。 使用 NULL 或空字符串来返回所有模式中的例程和触发器。 此参数区分大小写。
routine_module_name
类型为 VARCHAR (128) 的输入参数,用于指定输入例程的模块名称 (如果适用)。 使用 NULL 或空字符串返回所有模块中的例程。 此参数区分大小写。
routine_name
类型为 VARCHAR (128) 的输入参数,用于指定例程的名称。 如果输入参数为 "SP" 或 "SF" ,那么必须提供例程的特定名称。 对于动态准备的复合 SQL 语句或匿名块,可以使用 MON_GET_SECTION_ROUTINES 表函数来确定名称。 使用 NULL 或空字符串返回与其他输入参数匹配的所有例程。 此参数区分大小写。
成员
类型为 INTEGER 的输入参数,用于在调用此函数时指定与当前连接的数据库相同的实例中的有效成员。 指定 -1(表示当前数据库成员)或 -2(表示所有活动数据库成员)。 如果指定了 NULL 值,那么将隐式设置 -1。

返回的信息

表 1. 针对 MON_GET_ROUTINE_EXEC_LIST 返回的信息
列名 数据类型 描述或相应的监视元素
ROUTINE_TYPE CHAR(1) routine_type -“例程类型”监视元素
ROUTINE_SCHEMA VARCHAR(128) routine_schema -“例程模式”监视元素
routine_module_name VARCHAR(128) routine_module_name -“例程模块名”监视元素
routine_name VARCHAR(128) routine_name -“例程名称”监视元素
SPECIFIC_NAME VARCHAR(128) specific_name -“特定名称”监视元素
dyn_compound_exec_id VARCHAR(32) FOR BIT DATA dyn_compound_exec_id -“动态复合语句可执行标识”监视元素
MEMBER SMALLINT member -“数据库成员”监视元素
ROUTINE_ID INTEGER routine_id -“例程标识”监视元素
subroutine_id INTEGER subroutine_id -“子例程标识”监视元素
lib_id BIGINT lib_id -“库标识”监视元素
SECTION_TYPE CHAR(1) section_type-节类型指示符
PACKAGE_SCHEMA VARCHAR(128) package_schema-程序包模式
PACKAGE_NAME VARCHAR(128) package_name-包名
PACKAGE_VERSION_ID VARCHAR(64) package_version_id-程序包版本标识
SECTION_NUMBER BIGINT section_number-节号
STMTNO INTEGER stmtno -“语句号”监视元素
EXECUTABLE_ID VARCHAR(32) FOR BIT DATA executable_id-可执行文件标识
NUM_ROUTINES INTEGER num_routines - 例程数
call_stmt_routine_id INTEGER call_stmt_routine_id -“调用语句例程标识”监视元素
call_stmt_subroutine_id INTEGER call_stmt_subroutine_id -“调用语句子例程标识”监视元素
NUM_EXECUTIONS BIGINT num_间执行-语句执行数
NUM_EXEC_WITH_METRICS BIGINT num_exec_with_metrics-收集度量的执行次数
NUM_COORD_EXEC BIGINT num_coord_exec-协调程序代理程序执行的次数
NUM_COORD_EXEC_WITH_METRICS BIGINT num_coord_exec_with_metrics-协调代理程序使用度量值执行的次数
COORD_STMT_EXEC_TIME BIGINT coord_stmt_exec_time - 协调代理程序执行语句的时间
TOTAL_ACT_TIME BIGINT total_act_time - 活动总时间
TOTAL_ACT_WAIT_TIME BIGINT total_act_wait_time - 活动等待总时间
LOCK_WAIT_TIME BIGINT lock_wait_time - 等待锁定时间
LOCK_WAITS BIGINT lock_waits - 等待锁定次数
POST_THRESHOLD_SORTS BIGINT post_threshold_sorts - 后阈值排序数
POST_SHRTHRESHOLD_SORTS BIGINT post_shrthreshold_sorts - 后共享阈值排序数
ROWS_READ BIGINT rows_read - 读取行数
SORT_OVERFLOWS BIGINT sort_overflows - 排序溢出数
TOTAL_CPU_TIME BIGINT total_cpu_time - CPU 总时间
TOTAL_SORTS BIGINT total_sorts - 排序总数

使用说明

MON_GET_ROUTINE_EXEC_LIST 表函数针对例程或触发器执行的每个唯一语句 (部分) 返回一行。 此函数还会返回在例程或触发器中该语句的所有执行中聚集的一组度量。 不会跨成员执行聚集。 但是,可以通过 SQL 查询在成员之间进行聚集 (如 "示例" 部分中所示)。

聚集度量值不包含任何子语句的度量值。 例如,如果 CALL 语句由例程执行,那么 MON_GET_ROUTINE_EXEC_LIST 中针对 CALL 语句返回的指标不包含由 CALL 调用的其他语句执行的任何工作的指标。 唯一的例外是 coord_stmt_exec_time 监视元素,它返回语句的耗用时间,因此会隐式捕获子语句中所耗用的任何时间。

必须使用 mon_rtn_datamon_rtn_execlist 数据库配置参数显式启用例程监视数据收集和语句监视。 如果禁用了这些配置参数,那么不会返回任何信息。

此表函数返回的计数器和耗用时间监视元素通过针对工作负载的 COLLECT ACTIVITY METRICS 子句以及数据库级别的 mon_act_metrics 数据库配置参数进行控制。 如果这两个控件都未启用,那么所报告的计数器和耗用时间监视元素为 0。

从程序包高速缓存中清除动态准备的复合 SQL 语句或匿名块的程序包时, MON_GET_ROUTINE_EXEC_LIST 函数不再报告此语句的信息。 同样,当删除例程或触发器时,不再报告有关例程或触发器的信息。

将从内存中修剪随后删除或在前一个 24 小时期间未执行的例程所执行的语句,并且不返回这些语句。

示例

  1. 列出函数 TEST.X。
    SELECT SUBSTR(P.STMT_TEXT,1,45) AS TEXT 
       FROM TABLE(MON_GET_ROUTINE_EXEC_LIST('F', 'TEST', NULL, 'X', -1)) 
       AS T, TABLE(MON_GET_PKG_CACHE_STMT(NULL,NULL,NULL,-1)) AS P 
       WHERE T.EXECUTABLE_ID = P.EXECUTABLE_ID
    返回:
     TEXT                                   
     ---------------------------------------------
     WITH PID_VALUES (WIDEBAND,ENGN_TEMP) AS SEL
     insert into GSO_LOGS values(8.7, 145, 1.406)
     call SYSIBMSUBROUTINE.TEST_66613_1157394573() 
    
      3 record(s) selected.
  2. 列示过程 TEST.PROC1 (按它们所耗用的协调程序语句执行时间的百分比)。
    SELECT 100*B.COORD_STMT_EXEC_TIME / A.TOTAL_ROUTINE_COORD_EXEC_TIME 
       AS PERCENT_EXEC_TIME, SUBSTR(C.STMT_TEXT,1,45) 
       AS STMT_TEXT FROM TABLE(MON_GET_ROUTINE('SP',NULL,NULL,'PROC1', -1)) AS A, 
       TABLE(MON_GET_ROUTINE_EXEC_LIST('SP',NULL,NULL,'PROC1', -1)) AS B, 
       TABLE(MON_GET_PKG_CACHE_STMT(NULL,NULL,NULL,-1)) AS C 
       WHERE B.EXECUTABLE_ID = C.EXECUTABLE_ID ORDER BY B.COORD_STMT_EXEC_TIME DESC
    返回:
     PERCENT_EXEC_TIME  STMT_TEXT                                   
     ------------------ ---------------------------------------------
                     10  SELECT WAFR, MPHX64, ENGN_RPM FROM KB28_LOGS
                      3  SELECT ( ENGN_TQ * ENGN_RPM )/5252 AS HP FRO 
    
      2 record(s) selected.