MON_GET_AGENT 表函数 - 列示数据库的代理程序、设防方式进程和系统实体

MON_GET_AGENT 函数返回数据库的所有代理程序,受防护方式进程 (db2fmp 进程) 和系统实体的列表。 可以对列表进行过滤以显示指定成员,服务类或应用程序的信息。

这些系统实体为非代理程序线程和进程(例如页清除程序和预取程序)。

请参阅 表 1 ,以获取可返回的完整信息列表。

权限

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

缺省 PUBLIC 特权

语法

Read syntax diagramSkip visual syntax diagramMON_GET_AGENT(service_superclass_name ,service_subclass_name,application_handle ,member)

模式为 SYSPROC。

例程参数

service_superclass_name
类型为 VARCHAR(128) 的输入参数,用于指定当前连接的数据库中服务超类的名称。 如果该参数为 NULL 或空字符串,那么会针对数据库中的所有超类检索数据。
service_subclass_name
类型为 VARCHAR(128) 的输入参数,该参数是指超类中的特定子类。 如果该参数为 NULL 或空字符串,那么会针对数据库中的所有子类检索数据。
应用程序句柄
类型为 BIGINT 的输入参数,该参数指定要针对其返回代理程序信息的应用程序句柄。 如果该参数为 NULL,那么会针对数据库中的所有应用程序检索数据。 如果应用程序句柄为 0,那么仅会返回系统实体。
成员
类型为 INTEGER 的输入参数,该参数指定与当前所连接数据库在同一实例中的成员的编号。 指定 -1(表示当前数据库成员)或 -2(表示所有活动数据库成员)。 如果指定了空值,那么将隐式设置 -1。

返回的信息

表 1. 由 MON_GET_AGENT 例程返回的信息
列名 数据类型 描述
SERVICE_SUPERCLASS_NAME VARCHAR(128) service_superclass_name -“服务超类名”监视元素
SERVICE_SUBCLASS_NAME VARCHAR(128) service_subclass_name -“服务子类名”监视元素
APPLICATION_HANDLE BIGINT application_handle -“应用程序句柄”监视元素
DBPARTITIONNUM SMALLINT dbpartitionnum -“数据库分区号”监视元素
ENTITY VARCHAR (32) 以下某个值:
  • 如果实体的类型为代理程序,那么值为 db2agent。
  • 如果实体的类型为受防护方式进程,那么值为 db2fmp (pid),其中 pid 是受防护方式进程的进程标识。
  • 否则,值为系统实体的名称。
WORKLOAD_NAME VARCHAR(128) workload_name -“工作负载名称”监视元素
WORKLOAD_OCCURRENCE_ID INTEGER workload_occurrence_id -“工作负载项标识”监视元素
UOW_ID INTEGER uow_id -“工作单元标识”监视元素
ACTIVITY_ID INTEGER activity_id -“活动标识”监视元素
PARENT_UOW_ID INTEGER parent_uow_id -“父工作单元标识”监视元素
PARENT_ACTIVITY_ID INTEGER parent_activity_id -“父活动标识”监视元素
AGENT_TID BIGINT agent_tid -“代理程序线程标识”监视元素
AGENT_TYPE VARCHAR (32) 代理程序类型。 代理程序类型如下所示:
  • COORDINATOR
  • 其他
  • PDBSUBAGENT
  • SMPSUBAGENT
如果值为 COORDINATOR,那么在集中器环境中,代理程序标识可能会更改。

对于正在处理 按列组织的 表的代理程序,将返回 SMPSUBAGENT 类型。

SMP_COORDINATOR INTEGER 指示代理程序是否为 SMP 协调程序:1(代表“是”)和 0(代表“否”)。
AGENT_SUBTYPE VARCHAR (32) 代理程序子类型。 可能的子类型如下所示:
  • DSS
  • 其他
  • RPC
  • SMP
  • COLUMNAR
AGENT_STATE VARCHAR (32) 指示代理程序是处于关联状态还是活动状态。 可能的值包括:
  • ASSOCIATED
  • 活动
EVENT_TYPE VARCHAR (32) 最近一次由此代理程序处理的事件的类型。 可能的值如下所示:
  • ACQUIRE
  • PROCESS
  • WAIT

有关此列的可能值的更多信息,请参阅 表 2

EVENT_OBJECT VARCHAR (32) 最近一次由此代理程序处理的事件的对象。 可能的值如下所示:
  • COMPRESSION_DICTIONARY_BUILD
  • IMPLICIT_REBIND
  • INDEX_RECREATE
  • 锁存器
  • LOCK
  • LOCK_ESCALATION
  • QP_QUEUE
  • REMOTE_REQUEST
  • REQUEST
  • ROUTINE
  • WLM_QUEUE
  • TQ_SEND
  • TQ_RECEIVE

有关此列的可能值的更多信息,请参阅 表 2

EVENT_STATE VARCHAR (32) 最近一次由此代理程序处理的事件的状态。 可能的值如下所示:
  • EXECUTING
  • IDLE

有关此列的可能值的更多信息,请参阅 表 2

REQUEST_ID VARCHAR (64) 请求标识。 此值仅在与 application_handle 的值的组合中唯一。 可使用此组合来区分一个正在花费很长时间的请求与多个请求;例如,用于区分一个费时很长的访存与多个访存。
REQUEST_TYPE VARCHAR (32) 请求的类型。 可能的值如下所示:
  • 对于协调程序代理程序:
    • CLOSE
    • COMMIT
    • COMPILE
    • DESCRIBE
    • EXCSQLSET
    • EXECIMMD
    • EXECUTE
    • FETCH
    • INTERNAL number,其中 number 是内部常量的值
    • OPEN
    • PREPARE
    • REBIND
    • REDISTRIBUTE
    • 重组
    • ROLLBACK
    • 运行统计信息
  • 对于 AGENT_SUBTYPE 列值为 DSS , SMP 或 COLUMN 的子代理程序:
    • 如果子节号非零,那么子节号的格式为 SUBSECTION_NUMBER:subsection_number; 否则,为 NULL。
REQUEST_TYPE(续) VARCHAR (32)
  • 对于 AGENT_SUBTYPE 为 RPC 的子代理程序:
    • ABP
    • 目录
    • INTERNAL
    • 重组
    • 运行统计信息
    • WLM
  • 对于 SUBTYPE 为 OTHER 的子代理程序:
    • ABP
    • APP_RBSVPT
    • APP_RELSVPT
    • 备份
    • CLOSE
    • EXTERNAL_RBSVPT
    • EVMON
    • FORCE
    • FORCE_ALL
    • INTERNAL number,其中 number 是内部常量的值
    • INTERRUPT
    • NOOP(如果不存在任何请求)
    • QP
    • REDISTRIBUTE
    • STMT_RBSVPT
    • STOP_USING
    • UPDATE_DBM_CFG
    • WLM
NESTING_LEVEL INTEGER nesting_level -“嵌套级别”监视元素
INVOCATION_ID INTEGER invocation_id -“调用标识”监视元素
ROUTINE_ID INTEGER routine_id -“例程标识”监视元素
EVENT_OBJECT_NAME VARCHAR (1024) 事件对象名称。
  • 如果 EVENT_OBJECT 的值为 LOCK,那么此列的值是代理程序所等待的锁定的名称。
  • 如果 EVENT_OBJECT 的值为 WLM_QUEUE,那么该列的值是对代理程序进行排队的 WLM 阈值的名称。
  • 如果 EVENT_OBJECT 的值为 TQ_SEND 或 TQ_RECEIVE ,那么列的值表示表队列标识号。
  • 否则,值为 NULL。
APPLICATION_NAME VARCHAR(128)

appl_name - 应用程序名称

APPLICATION_ID VARCHAR(128)

appl_id - 应用程序标识

CLIENT_PID BIGINT

client_pid - 客户机进程标识

SESSION_AUTH_ID VARCHAR(128)

session_auth_id - 会话授权标识

REQUEST_START_TIME TIMESTAMP

代理程序开始处理其当前正在处理的请求的时间

AGENT_STATE_LAST_UPDATE_TIME TIMESTAMP

最近一次更改代理程序正在处理的事件的时间。 代理程序当前处理的事件由 EVENT_TYPE 列、EVENT_OBJECT 列和 EVENT_STATE 列标识。

EXECUTABLE_ID VARCHAR (32) FOR BIT DATA executable_id -“可执行标识”监视元素
MEMBER SMALLINT member -“数据库成员”监视元素
UTILITY_INVOCATION_ID VARCHAR (32) FOR BIT DATA utility_invocation_id - 实用程序调用标识
IS_SYSTEM_APPL SMALLINT is_system_appl -“是系统应用程序”监视元素
SUBSECTION_NUMBER BIGINT 如果代理程序 (任何代理程序类型) 正在处理子节,那么显示子节标识; 否则显示 NULL。
EVENT_OBJECT_DETAILS VARCHAR (1024) 显示有关事件等待对象的详细信息。 有关事件等待对象的基本信息显示在 EVENT_OBJECT_NAME 字段中。
注: 下表列出了 EVENT_STATE , EVENT_TYPE , EVENT_OBJECT 和 EVENT_OBJECT_NAME 列值的可能组合。
表 2. EVENT_STATE、EVENT_TYPE、EVENT_OBJECT 和 EVENT_OBJECT_NAME 列值的可能组合
事件描述 EVENT_STATE 值 EVENT_TYPE 值 EVENT_OBJECT 值 EVENT_OBJECT_NAME 值 EVENT_OBJECT_DETAILS 值
获取锁定 IDLE ACQUIRE LOCK 锁定名称 NULL
上报锁定 EXECUTING PROCESS LOCK_ESCALATION NULL NULL
处理请求 EXECUTING PROCESS REQUEST NULL NULL
等待新请求 IDLE WAIT REQUEST NULL NULL
等待在远程成员上处理请求 IDLE WAIT REMOTE_REQUEST NULL NULL
等待 WLM 阈值队列 IDLE WAIT WLM_QUEUE 阈值名称 NULL
处理例程 EXECUTING PROCESS ROUTINE NULL NULL
重新创建索引 EXECUTING PROCESS INDEX_RECREATE NULL NULL
构建压缩字典 EXECUTING PROCESS COMP_DICT_BLD NULL NULL
隐式重新绑定 EXECUTING PROCESS IMPLICIT_REBIND NULL NULL
在表队列上发送数据 IDLE WAIT TQ_SEND 表队列号 正在等待表队列的成员号,或 -1 表示任何成员。
在表队列上接收数据 IDLE WAIT TQ_RECEIVE 表队列号 正在等待表队列的成员号,或 -1 表示任何成员。
锁存器等待时间 IDLE WAIT 锁存器 锁存器名称 NULL

使用说明

这些参数实际上是一起评估的。 即,如果指定有冲突的输入参数(例如指定服务超类 SUP_A 和子类 SUB_B,这样 SUB_B 不是 SUP_A 的子类),那么不会返回任何行。

示例

  1. 以下查询会针对所有数据库成员返回与应用程序句柄 1 关联的代理程序的列表。 可通过使用 LIST APPLICATIONS 命令或 MON_GET_CONNECTION 表函数来确定应用程序句柄。
      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,12) AS REQTYPE,
        SUBSTR(CHAR(UOW_ID),1,6) AS UOW_ID,
        SUBSTR(CHAR(ACTIVITY_ID),1,6) AS ACT_ID
      FROM TABLE(MON_GET_AGENT(CAST(NULL AS VARCHAR(128)), 
        CAST(NULL AS VARCHAR(128)), 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         SUBAGENT    ACTIVE     SUBSECTION:1   1      5
    1         1    2         SUBAGENT    ACTIVE     SUBSECTION:2   1      5
    
    输出显示成员 0 上的协调代理程序和子代理程序,以及代表 UOW 标识为 1 且活动标识为 5 的活动的成员 1 上的子代理程序。 值为 COORDINATORAGENTTYPE 列对于 REQTYPE 列具有值 FETCH (指示主请求类型或初始请求类型)。 这意味着,对于该协调程序代理程序,请求的类型是访存请求。
  2. 以下查询确定代理程序正在等待哪个锁定:
     select event_object, event_type, event_state, varchar(event_object_name, 30) 
       as event_object_name 
       from table(MON_GET_AGENT('','',cast(NULL as bigint), -1)) as t
    样本输出如下所示:
    EVENT_OBJECT    EVENT_TYPE        EVENT_STATE         EVENT_OBJECT_NAME         
    --------------- ----------------- ------------------- --------------------------
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         WAIT              IDLE                -                         
    LOCK            ACQUIRE           IDLE                02000500000000000000000054
    ROUTINE         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    
      21 record(s) selected.
    稍后使用同一查询会显示 WLM 阈值已对代理程序进行排队:
    EVENT_OBJECT    EVENT_TYPE        EVENT_STATE         EVENT_OBJECT_NAME         
    --------------- ----------------- ------------------- --------------------------
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    WLM_QUEUE       WAIT              IDLE                MYCONCDBCOORDTH           
    ROUTINE         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -                         
    REQUEST         PROCESS           EXECUTING           -
    
      21 record(s) selected.
  3. 在此示例中,应用程序正在具有 BLU Acceleration的分区数据库环境中运行。 您希望收集有关所涉及的各种代理程序的状态的一些信息。 您可以使用快照界面来确定项,例如:
    • 哪些代理程序正在处理哪个子节
    • 在表队列上的子节之间发送和接收的行数
    • 从磁盘读取和写入的一个或多个行数
    但是,不能使用快照接口来确定正在处理特定子节的每个代理程序的状态。 某些代理程序可能正在不同的表队列和分区上等待。
    以下查询可用于收集有关所涉及的各种代理程序的状态的信息。 此查询假定您知道应用程序编号 (例如,在本例中为 349):
       SELECT SUBSTR(CHAR(APPLICATION_HANDLE),1,7) AS APPHANDLE, 
              SUBSTR(CHAR(MEMBER),1,4) AS MEMB, 
              SUBSTR(CHAR(AGENT_TID),1,20) AS AGENT_TID, 
              SUBSTR(AGENT_SUBTYPE,1,10) AS AGENT_SUBTYPE, 
              SUBSTR(AGENT_TYPE,1,11) AS AGENTTYPE, 
              SUBSTR(AGENT_STATE,1,10) AS AGENTSTATE, 
              SUBSTR(EVENT_STATE,1,10) AS EVENT_STATE, 
              SUBSTR(EVENT_TYPE,1,10) AS EVENT_TYPE, 
              SUBSTR(EVENT_OBJECT,1,10) AS EVENT_OBJECT, 
              SUBSTR(REQUEST_TYPE,1,12) AS REQTYPE, 
              SUBSTR(EVENT_OBJECT_NAME,1,10) AS TQ_ID, 
              SUBSTR(CHAR(SUBSECTION_NUMBER),1,4) AS SUB_ID, 
              SUBSTR(EVENT_OBJECT_DETAILS,1,10) AS TQ_WAIT_MEM 
          FROM TABLE(MON_GET_AGENT(CAST(NULL AS VARCHAR(128)), CAST(NULL AS VARCHAR(128)), 349, -2)) 
              AS SCDETAILS 
              ORDER BY APPHANDLE, MEMB, AGENT_TID
    注: EVENT_OBJECT_NAME 显示为 TQ_ID , SUBSECTION_NUMBER 显示为 SUB_ID , EVENT_OBJECT_DETAILS 显示为 TQ_WAIT_MEM。 TQ_WAIT_MEM 表示您正在等待的成员,其中 -1 表示 "任何"。

    下列是从此查询输出的示例。

    APPHANDLE MEMB AGENT_TID            AGENT_SUBTYPE AGENTTYPE   AGENTSTATE ...
    --------- ---- -------------------- ------------- ----------- ---------- ...
    349       0    250                  -             COORDINATOR ACTIVE     ...
    349       0    338                  COLUMNAR      SMPSUBAGENT ACTIVE     ...
    349       0    343                  COLUMNAR      SMPSUBAGENT ACTIVE     ...
    349       0    335                  SMP           SMPSUBAGENT ACTIVE     ...
    349       0    336                  SMP           SMPSUBAGENT ACTIVE     ...
    349       1    277                  COLUMNAR      SMPSUBAGENT ACTIVE     ...
    349       2    278                  COLUMNAR      SMPSUBAGENT ACTIVE     ...
    
    查询的输出(继续)。
    ...EVENT_STATE EVENT_TYPE EVENT_OBJECT REQTYPE      TQ_ID      SUB_ID TQ_WAIT_MEM    
    ...----------- ---------- ------------ ------------ ---------- ------ -----------    
    ...IDLE        WAIT       TQ_RECEIVE   OPEN         1          0      -1             
    ...IDLE        WAIT       TQ_SEND      SUBSECTION:2 3          2      -1             
    ...IDLE        WAIT       TQ_RECEIVE   -            2          0      -1             
    ...IDLE        WAIT       REQUEST      -            -          0      -              
    ...EXECUTING   PROCESS    REQUEST      -            -          0      -              
    ...IDLE        WAIT       TQ_SEND      SUBSECTION:2 3          2      -1             
    ...IDLE        WAIT       TQ_SEND      SUBSECTION:2 3          2      -1             
    

    在此示例中, AGENT_TID 值为 338 的代理程序表示分区 0; 值 277 表示分区 1; 值 278 表示分区 2。 所有这三个代理程序都在等待发送到所有分区上的 TQ_ID 3。 发送至所有分区称为广播。 在这种情况下,此广播发生在子节标识 2 中。 分区 0 上标识为 250 的代理程序正在处理子节 0 ,并且正在等待从任何分区接收 TQ_ID 1。 标识为 343 的代理程序也在子节 0 上等待接收,但在 TQ_ID 2 上等待从任何分区接收。 标识为 335 和 336 的代理程序未在等待任何 TQ。