DB2 Version 9.7 for Linux, UNIX, and Windows

MON_GET_APPL_LOCKWAIT 表関数 - アプリケーションが待機しているロックについての情報の収集

MON_GET_APPL_LOCKWAIT 表関数は、(現在のデータベースに接続されている) 各アプリケーションのエージェントが取得を待機しているすべてのロックについての情報を戻します。

注: バージョン 9.7 のフィックスパック 1 以前で作成されたデータベースを使用している場合、このルーチンを実行するには、db2updv97 コマンドが既に実行済みでなければなりません。 バージョン 9.7 以前に作成されたデータベースを使用している場合は、db2updv97 コマンドを実行する必要はありません (データベースのマイグレーションによって自動的にカタログ更新が実行されるため)。 バージョン 9.7 にダウングレードすると、このルーチンは機能しなくなります。

ロックについての情報を取得するには MON_GET_APPL_LOCKWAIT、MON_FORMAT_LOCK_NAME、および MON_GET_LOCKS 表関数を使用してください。SNAPLOCKWAIT 管理ビューと SNAP_GET_LOCKWAIT 表関数、および SNAPLOCK 管理ビューと SNAP_GET_LOCK 表関数は バージョン 9.7 フィックスパック 1 で非推奨になりました。

構文図を読む構文図をスキップする
>>-MON_GET_APPL_LOCKWAIT--(--application_handle--,--member--)--><

スキーマは SYSPROC です。

表関数パラメーター

application_handle
現在接続されているのと同じデータベース内の有効なアプリケーション・ハンドルを指定する、オプションのタイプ BIGINT の入力パラメーター。 この引数が NULL である場合、ロックの取得を現在待機しているすべてのアプリケーションに関するロックが検索されます。
member
現在接続されているデータベースと同じインスタンス内の有効なメンバーを指定する、タイプ INTEGER の入力パラメーター。 現在のデータベース・メンバーの場合は -1、すべてのアクティブ・メンバーの場合は -2 を指定します。 NULL 値を指定すると、-1 が設定されます。

許可

以下のいずれかの権限または特権が必要です。
  • SYSADM 権限
  • SYSMON 権限
  • MON_GET_APPL_LOCKWAIT 表関数に対する EXECUTE 特権。

この例のシナリオでは MON_GET_APPL_LOCKWAIT 表関数を使用して、セッション許可 ID USER1 に関するハングしているアプリケーションを調べます。
  1. 次のように WLM_GET_SERVICE_CLASS_WORKLOAD_OCCURRENCES_V97 表関数を使用して、SESSION_USER 値 USER1 のすべての接続に関するアプリケーション・ハンドルを検索します。
    SELECT COORD_PARTITION_NUM, 
    	    APPLICATION_HANDLE 
    FROM TABLE(WLM_GET_SERVICE_CLASS_WORKLOAD_OCCURRENCES_V97('','',-2)) 
    WHERE SESSION_USER = 'USER1'
    この照会は、以下の出力を戻します。
    COORD_PARTITION_NUM              APPLICATION_HANDLE  
    -------------------------------  ----------------------------
            2                        131130
      
    1 record(s) selected.
  2. 次のように WLM_GET_SERVICE_CLASS_AGENTS_V97 表関数を使用して、すべてのデータベース・パーティションで、この接続を扱っているすべてのエージェントに関する現行情報を取得します。
    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(WLM_GET_SERVICE_CLASS_AGENTS_V97('','',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 のイベント・オブジェクトに対するタイプ ACQUIRE のイベントはロック待機シナリオを示しているため、待機の対象となっているオブジェクトは何か、および何がそのロックを保持しているかを調べる必要があります。

  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. WLM_SERVICE_CLASS_WORKLOAD_OCCURRENCES_V97 表関数を呼び出して、ロックを保持している (アプリケーション・ハンドル 65564 の) アプリケーションについて詳細情報を検出します。
    SELECT  SYSTEM_AUTH_ID, 
    	  APPLICATION_NAME AS APP_NAME, 
    	  WORKLOAD_NAME AS WORKLOAD, 
    	  WORKLOAD_OCCURRENCE_STATE AS WL_STATE 
    FROM TABLE(WLM_GET_SERVICE_CLASS_WORKLOAD_OCCURRENCES_V97('','',-2)) 
    WHERE APPLICATION_HANDLE = 65564
    この照会は、以下の出力を戻します。
    SYSTEM_AUTH_ID APP_NAME WORKLOAD                WL_STATE
    -------------- -------- ----------------------- -----------
         ZURBIE    db2bp    SYSDEFAULTUSERWORKLOAD  UOWWAIT
    
      1 record(s) selected

戻される情報

戻される列は、次のような領域の情報を提供します。
  • 以下の列は、アプリケーションが取得を現在待機しているロックについての詳細を表します。

    LOCK_WAIT_START_TIME、 LOCK_NAME、 LOCK_OBJECT_TYPE、 LOCK_MODE、 LOCK_CURRENT_MODE、 LOCK_MODE_REQUESTED、 LOCK_STATUS、 LOCK_ESCALATION、 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 値が戻されます。

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 BIGINT lock_count - ロック・カウント・モニター・エレメント
TBSP_ID BIGINT tablespace_id - 表スペース ID
TAB_FILE_ID BIGINT table_file_id - 表ファイル 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 - 要求元の実行可能 ID

HLD_APPLICATION_
   HANDLE

BIGINT

hld_application_handle - 保持しているアプリケーション・ハンドル

このロックを保持しているアプリケーションが不明または見つからない場合には、NULL 値が戻されます。

HLD_MEMBER SMALLINT hld_member - 保持しているメンバー
ADDITIONAL_DETAILS BLOB(100K) 内部使用のために予約済み