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 の入力パラメーター。 この引数が 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
列名 | データ・タイプ | 説明またはモニター・エレメント |
---|---|---|
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 表スペース ID |
TAB_FILE_ID | BIGINT | table_file_id 表ファイル 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-要求元の実行可能 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 のイベント・オブジェクトに対するタイプ ACQUIRE のイベントはロック待機シナリオを示します。 これで、待機の対象となっているオブジェクト、およびそのロックを保持しているプロセスを調べることができます。
- アプリケーションが待機しているすべてのロックを判別するには、アプリケーション・ハンドル 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