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 中不推荐使用)。
模式为 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
列名 | 数据类型 | 描述或监视元素 |
---|---|---|
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_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_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_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.
- 使用 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 的事件对象上类型为习得的事件指示锁定等待方案。 现在,您可以调查正在等待的对象以及对该对象挂起锁定的进程。
- 要确定应用程序正在等待的所有锁定,请使用应用程序句柄 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.
- 调用 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