MON_GET_APPL_LOCKWAIT 表函数 - 获取有关应用程序正在等待的锁定的信息

MON_GET_APPL_LOCKWAIT 表函数返回有关每个应用程序的代理程序 (已连接到当前数据库) 正在等待获取的所有锁定的信息。

要获取有关锁定的信息,请使用 MON_GET_APPL_LOCKWAIT , MON_FORMAT_LOCK_NAME 和 MON_GET_LOCKS 表函数 (而不是 SNAPLOCKWAIT 管理视图和 SNAP_GET_LOCKWAIT 表函数) 以及 SNAPLOCK 管理视图和 SNAP_GET_LOCK 表函数 (在 版本 9.7的修订包 1 中不推荐使用)。

Read syntax diagramSkip visual syntax diagramMON_GET_APPL_LOCKWAIT(application_handle ,member ,system_appls )

模式为 SYSPROC。

例程参数

application_handle
类型为 BIGINT 的可选输入参数,用于在与您当前所连接的数据库相同的数据库中指定有效的应用程序句柄。 如果参数为空,那么将针对当前正在等待获取锁定的所有应用程序检索锁定。
成员
类型为 INTEGER 的输入参数,用于指定与当前连接的数据库位于同一实例中的有效成员。 为当前数据库成员指定 -1 ,或为所有活动成员指定 -2 。 如果指定了空值,那么将设置 -1
系统应用程序
类型为 SMALLINT 的输入参数,用于指定是否返回系统应用程序的信息。 以下值有效:
  • 0 或 NULL:不返回系统应用程序信息。 如果未提供 system_appls 的值,那么 NULL 是缺省值。
  • 1:返回用户和系统应用程序信息。

权限

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

缺省 PUBLIC 特权

返回的信息

返回的列提供以下区域中的信息:
  • 以下列表示有关应用程序当前正在等待获取的锁定的详细信息:

    LOCK_WAIT_START_TIME , LOCK_NAME , LOCK_OBJECT_TYPE , LOCK_MODE , LOCK_CURRENT_MODE , LOCK_MODE_REQUESTED , LOCK_STATUS ,LOCK_上报, LOCK_ATTRIBUTES , LOCK_RRIID , LOCK_COUNT , TBSP_ID , TAB_FILE_ID 和 SUBSECTION_NUMBER。

  • 以下列表示有关正在等待获取此锁定的应用程序的详细信息。

    REQ_APPLICATION_HANDLE , REQ_AGENT_TID , REQ_MEMBER 和 REQ_EXECUTABLE_ID

  • 以下列表示有关当前持有锁定的应用程序的详细信息。

    HLD_APPLICATION_HANDLE , HLD_MEMBER 和 ADDITIONAL_DETAILS

表 1. MON_GET_APPL_LOCKWAIT 表函数返回的信息
列名 数据类型 描述或监视元素
LOCK_WAIT_START_TIME TIMESTAMP lock_wait_start_time - 锁定等待开始时间戳记
LOCK_NAME VARCHAR(32) lock_name - 锁定名称

可以使用 MON_FORMAT_LOCK_NAME 表函数来格式化内部名称,以获取有关锁定的详细信息。 例如,可以找到锁定引用的表和表空间 (如果这是表锁定)。

LOCK_OBJECT_TYPE_ID CHAR(1) FOR BIT DATA 留作将来使用
LOCK_OBJECT_TYPE VARCHAR(32) lock_object_type - 等待的锁定对象类型

有关可能的值,请参阅 lock_object_type-"等待的锁定对象类型" 监视元素

LOCK_MODE VARCHAR(3) lock_mode - 锁定方式

如果找不到持有此锁定的应用程序,那么将返回值 NULL。

对于全局锁定等待,此值为 NULL。

LOCK_CURRENT_MODE VARCHAR(3) lock_current_mode - 转换前的原始锁定方式

如果未进行任何转换,那么将返回值 NULL。

LOCK_MODE_REQUESTED VARCHAR(3) lock_mode_requested - 请求的锁定方式
LOCK_STATUS CHAR(1) lock_status - 锁定状态
LOCK_ESCALATION CHAR(1) lock_escalation - 锁定升级
LOCK_ATTRIBUTES CHAR(16) lock_attributes - 锁定属性
LOCK_RRIID BIGINT lock_count -“锁定计数”监视元素
LOCK_COUNT BIGINT lock_count -“锁定计数”监视元素
tbsp_id BIGINT tablespace_id-表空间标识
tab_file_id BIGINT table_file_id-表文件标识
SUBSECTION_NUMBER BIGINT ss_number - 子节号

如果子节号不可用,那么将返回值 NULL。

req_application_handle BIGINT

req_application_handle-请求应用程序句柄

req_agent_tid BIGINT req_agent_tid-正在请求代理程序 TID
req_member SMALLINT req_member-正在请求成员
req_executable_id VARCHAR (32) FOR BIT DATA req_executable_id-正在请求可执行文件标识
hld_application_handle BIGINT

hld_application_handle-保存应用程序句柄

值 0 指示应用程序不再存在。 当系统崩溃后数据库上的事务不完整时,可能会显示该值。 这意味着锁定由正在回滚的事务或必须解决的不确定事务持有。

如果持有此锁定的应用程序未知或找不到,那么将返回值 NULL。

对于全局锁定等待,此值为 NULL。

hld_member SMALLINT hld_member-保留成员
IS_SYSTEM_APPL SMALLINT is_system_appl - 是系统应用程序

示例

在此样本场景中, MON_GET_APPL_LOCKWAIT 表函数用于调查会话授权标识 USER1的挂起应用程序。
  1. 使用 MON_GET_CONNECTION 表函数来查找具有 SESSION_USER 值 USER1: 的所有连接的应用程序句柄
    SELECT COORD_PARTITION_NUM, APPLICATION_HANDLE
       FROM TABLE(MON_GET_CONNECTION(NULL,-2))
       WHERE SESSION_USER = 'USER1' 
    此查询将返回以下输出:
    COORD_PARTITION_NUM              APPLICATION_HANDLE  
    -------------------------------  ----------------------------
    2                                131130
      
    1 record(s) selected.
  2. 使用 MON_GET_AGENT 表函数来获取有关所有数据库分区上用于此连接的所有代理程序的当前信息:
    SELECT SUBSTR(CHAR(DBPARTITIONNUM),1,3) AS DBPART,
    	    SUBSTR(CHAR(APPLICATION_HANDLE),1,7) AS APP_ID, 
    	    SUBSTR(CHAR(WORKLOAD_OCCURRENCE_ID),1,7) AS WLO_ID, 
    	    SUBSTR(CHAR(AGENT_TID),1,7) AS AGENT_ID, 
    	    SUBSTR(CHAR(AGENT_TYPE),1,12) AS AGENT_TYPE, 
    	    SUBSTR(AGENT_STATE,1, 8) AS STATE, 
    	    SUBSTR(EVENT_TYPE,1, 8) AS EV_TYPE, 
    	    SUBSTR(EVENT_OBJECT,1,12) AS EV_OBJECT
    FROM TABLE(MON_GET_AGENT('','',131130,-2))
    ORDER BY AGENT_TYPE, DBPART
    此查询将返回以下输出:
    DBPART  APP_ID  WLO_ID  AGENT_ID  AGENT_TYPE  STATE   EV_TYPE  EV_OBJECT  
    ------  ------- ------- --------- ----------- ------  -------- ----------
    2       131130  1       3110      COORDINATOR ACTIVE  WAIT     REQUEST
    0       131130  1       7054      PDBSUBAGENT ACTIVE  ACQUIRE  LOCK
    1       131130  1       5709      PDBSUBAGENT ACTIVE  ACQUIRE  LOCK
    2       131130  1       5960      PDBSUBAGENT ACTIVE  ACQUIRE  LOCK
    
      4 record(s) selected.

    类型为 LOCK 的事件对象上类型为习得的事件指示锁定等待方案。 现在,您可以调查正在等待的对象以及对该对象挂起锁定的进程。

  3. 要确定应用程序正在等待的所有锁定,请使用应用程序句柄 131130 和成员 -2 作为输入参数来调用 MON_GET_APPL_LOCKWAIT 表函数。
    SELECT lock_name, 
           hld_member AS member, 
           hld_agent_tid as TID, 
           hld_application_handle AS HLD_APP FROM 
           TABLE (MON_GET_APPL_LOCKWAIT(131130, -2))
    
    此查询将返回以下输出:
    LOCK_NAME                  MEMBER TID    HLD_APP
    -------------------------- ------ ------ -------
    00030005000000000280000452    0   1234   65564
    00030005000000000280000452    1   5478   65564 
    00030005000000000280000452    2   4678   65564
    
      3 record(s) selected.
  4. 调用 MON_GET_CONNECTION 表函数以了解有关持有锁定的应用程序的更多信息 (此应用程序的应用程序句柄为 65564)。
    SELECT SYSTEM_AUTH_ID, APPLICATION_NAME AS APP_NAME,
       WORKLOAD_OCCURRENCE_STATE AS WL_STATE
    FROM TABLE(MON_GET_CONNECTION(NULL,-2))
    WHERE APPLICATION_HANDLE = 65564
    
    
    此查询将返回以下输出:
    SYSTEM_AUTH_ID APP_NAME WL_STATE
    -------------- -------- -----------
    ZURBIE         db2bp    UOWWAIT