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 の入力パラメーター。 この引数が NULL である場合、ロックの取得を現在待機しているすべてのアプリケーションに関するロックが検索されます。
member
現在接続されているデータベースと同じインスタンス内の有効なメンバーを指定する、タイプ INTEGER の入力パラメーター。 現在のデータベース・メンバーの場合は -1、すべてのアクティブ・メンバーの場合は -2 を指定します。 NULL 値を指定すると、-1 が設定されます。
システム・アプリケーション
システム・アプリケーションの情報が戻されるかどうかを指定する、タイプ SMALLINT の入力パラメーター。 以下の値が有効です。
  • 0 または NULL: システム・アプリケーションの情報は戻されません。 NULL は、system_appls の値が指定されていない場合のデフォルトです。
  • 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_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 値が戻されます。

グローバル・ロック待機の場合、この値は 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 表スペース 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-保持しているアプリケーション・ハンドル

値が 0 の場合は、そのようなアプリケーションが存在しないことを表します。 システムの異常終了後に未完了トランザクションがデータベースに残っていると、その値になることがあります。 その場合は、ロールバックされるトランザクションまたは解決が必要な未確定トランザクションのいずれかがロックを保持しています。

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

グローバル・ロック待機の場合、この値は NULL です。

HLD_MEMBER SMALLINT hld_member-メンバーの保持
IS_SYSTEM_APPL SMALLINT is_system_appl システム・アプリケーション

この例のシナリオでは MON_GET_APPL_LOCKWAIT 表関数を使用して、セッション許可 ID 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 のイベント・オブジェクトに対するタイプ 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. 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