IBM Support

[Db2] しきい値を超える実行時間のトランザクションをイベント・モニターに記録する方法

Question & Answer


Question

ある決まった実行時間を越えるトランザクションを記録するには、どうすればよいですか。

Cause

"LOG EVENT MONITOR RECORD" REMAP アクションを持つしきい値を定義して、しきい値を超えたアクティビティを、THRESHOLD VIOLATIONS イベント・モニター表に、記録することが可能です。
* しきい値違反のモニター
  https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.admin.wlm.doc/doc/t0052784.html

  Db2 ワークロード・マネージャーのしきい値の違反があった場合には、アクティブな THRESHOLD VIOLATIONS イベント・モニターがある場合、それにしきい値違反レコードが書き込まれます。
 
  ... しきい値違反レコードが記録されるかどうかは、CREATE THRESHOLD ステートメントの NO EVENT MONITOR RECORD または LOG EVENT MONITOR RECORD 節によって決まります。

Answer

  以下のリンクにあるように、ACTIVITYTOTALRUNTIMEINALLSC しきい値を用いた REMAP アクション付のしきい値を、デフォルトのサービス・クラス上に作成し、THRESHOLD VIOLATIONS イベント・モニター表で記録されたアクティビティを確認するサンプルを参照してください。
* ACTIVITYTOTALRUNTIMEINALLSC しきい値
  https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.admin.wlm.doc/doc/r0070194.html

  ACTIVITYTOTALRUNTIMEINALLSC しきい値は、以下の例外を除き、ACTIVITYTOTALRUNTIME しきい値と同じです。
  - ACTIVITYTOTALRUNTIMEINALLSC しきい値は、サービス・サブクラス・ドメインに対してのみ定義できます。
  - ACTIVITYTOTALRUNTIMEINALLSC しきい値は、REMAP アクションをサポートしています。
 
* THRESHOLD VIOLATIONS イベント・モニター "EVM_THRVIOLATION" による ACTIVITYTOTALRUNTIMEINALLSC 違反のアクティビティの記録の例
1. "EVM_THRVIOLATION" THRESHOLD VIOLATIONS イベント・モニターの作成
### "EVM_THRVIOLATION" THRESHOLD VIOLATIONS Event Monitor を作成し、活動化します。
$ db2 "
create event monitor EVM_THRVIOLATION
    for threshold violations
    write to table
    thresholdviolations ( table EVM_TBL_THRVIOLATION ),
    control ( table EVM_CTLTBL_THRVIOLATION )
    autostart
"
DB20000I  The SQL command completed successfully.
$ db2 set event monitor EVM_THRVIOLATION state 1
DB20000I  The SQL command completed successfully.
$ db2 "
select char(EVMONNAME,24) EVMONNAME, TARGET_TYPE, char(TARGET,24) TARGET, AUTOSTART
    , case
        when event_mon_state(EVMONNAME) = 0 then 'Inactive'
        when event_mon_state(EVMONNAME) = 1 then 'Active'
        end as STATE
    from SYSCAT.EVENTMONITORS
"
EVMONNAME                TARGET_TYPE TARGET                   AUTOSTART STATE
------------------------ ----------- ------------------------ --------- --------
DB2DETAILDEADLOCK        F           db2detaildeadlock        Y         Active
EVM_THRVIOLATION         T                                    Y         Active
  2 record(s) selected.
### このときは、まだ "EVM_THRVIOLATION" THRESHOLD VIOLATIONS Event Monitor 表には、Event Monitor が活動化された以外、何の記録もありません。
$ db2 "
select ACTIVATE_TIMESTAMP, ACTIVITY_COLLECTED, ACTIVITY_ID
    , APPL_ID, char(APPLICATION_NAME,16) APPLICATION_NAME
    , DESTINATION_SERVICE_CLASS_ID, SOURCE_SERVICE_CLASS_ID
    , THRESHOLD_ACTION, THRESHOLD_MAXVALUE, TIME_OF_VIOLATION
    from EVM_TBL_THRVIOLATION
"
ACTIVATE_TIMESTAMP         ACTIVITY_COLLECTED ACTIVITY_ID          APPLICATION_NAME THRESHOLD_ACTION THRESHOLD_MAXVALUE   TIME_OF_VIOLATION
-------------------------- ------------------ -------------------- ---------------- ---------------- -------------------- --------------------------
  0 record(s) selected.
$ db2 "
select PARTITION_KEY, char(EVENT_MONITOR_NAME,16) EVENT_MONITOR_NAME
    , char(MESSAGE,32) MESSAGE, MESSAGE_TIME, PARTITION_NUMBER
    from EVM_CTLTBL_THRVIOLATION
"
PARTITION_KEY EVENT_MONITOR_NAME MESSAGE                          MESSAGE_TIME               PARTITION_NUMBER
------------- ------------------ -------------------------------- -------------------------- ----------------
            0 EVM_THRVIOLATION   FIRST_CONNECT                    2019-08-13-14.34.27.109736                0
            0 EVM_THRVIOLATION   EVMON_START                      2019-08-13-14.51.58.107498                0
  2 record(s) selected.
2. REMAP アクションを持つしきい値 "THRACTTIMESC" の用意
### ACTIVITYTOTALRUNTIMEINALLSC しきい値を用いての Remap activity threshold の作成が可能です。
* ACTIVITYTOTALRUNTIMEINALLSC threshold
  https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.admin.wlm.doc/doc/r0070194.html

  ACTIVITYTOTALRUNTIMEINALLSC しきい値は、以下の例外を除き、ACTIVITYTOTALRUNTIME しきい値と同じです。
    ACTIVITYTOTALRUNTIMEINALLSC しきい値は、サービス・サブクラス・ドメインに対してのみ定義できます。
    ACTIVITYTOTALRUNTIMEINALLSC しきい値は、REMAP アクションをサポートしています。
 
### "THRACTTIMESC" Activity Runtme threshold を、デフォルトのサービス・クラス "SYSDEFAULTSYSTEMCLASS" 上の "SYSDEFAULTSUBCLASS" と "SYSDEFAULTMANAGEDSUBCLASS" を用いて作成します。
$ db2 "
select char(SERVICECLASSNAME,32) SERVICECLASSNAME, SERVICECLASSID
    , char(PARENTSERVICECLASSNAME,32) PARENTSERVICECLASSNAME, PARENTID
    , CREATE_TIME, ALTER_TIME, ENABLED, COLLECTAGGACTDATA, COLLECTACTDATA, CPULIMIT
    from SYSCAT.SERVICECLASSES
"
SERVICECLASSNAME                 SERVICECLASSID PARENTSERVICECLASSNAME           PARENTID CREATE_TIME                ALTER_TIME                 ENABLED COLLECTAGGACTDATA COLLECTACTDATA CPULIMIT
-------------------------------- -------------- -------------------------------- -------- -------------------------- -------------------------- ------- ----------------- -------------- --------
SYSDEFAULTSYSTEMCLASS                         1 -                                       0 2019-05-28-09.37.21.530047 2019-05-28-09.37.21.530047 Y       N                 N                    -1
SYSDEFAULTMAINTENANCECLASS                    2 -                                       0 2019-05-28-09.37.21.535127 2019-05-28-09.37.21.535127 Y       N                 N                    -1
SYSDEFAULTUSERCLASS                           3 -                                       0 2019-05-28-09.37.21.535161 2019-05-28-09.37.21.535161 Y       N                 N                    -1
SYSDEFAULTSUBCLASS                           11 SYSDEFAULTSYSTEMCLASS                   1 2019-05-28-09.37.21.535191 2019-05-28-09.37.21.535191 Y       N                 N                    -1
SYSDEFAULTSUBCLASS                           12 SYSDEFAULTMAINTENANCECLASS              2 2019-05-28-09.37.21.535296 2019-05-28-09.37.21.535296 Y       N                 N                    -1
SYSDEFAULTSUBCLASS                           13 SYSDEFAULTUSERCLASS                     3 2019-05-28-09.37.21.535401 2019-05-28-09.37.21.535401 Y       N                 N                    -1
SYSDEFAULTMANAGEDSUBCLASS                     4 SYSDEFAULTUSERCLASS                     3 2019-05-28-09.37.21.536658 2019-05-28-09.37.21.536658 Y       N                 N                    -1
  7 record(s) selected.
$ db2 "
create threshold THRACTTIMESC for service class SYSDEFAULTSUBCLASS under SYSDEFAULTUSERCLASS activities
    enforcement database
    when ACTIVITYTOTALRUNTIMEINALLSC > 30 minutes
    remap activity to SYSDEFAULTMANAGEDSUBCLASS
    log event monitor record
"
DB20000I  The SQL command completed successfully.
$ db2 "
select char(THRESHOLDNAME,32) THRESHOLDNAME, ORIGIN, THRESHOLDCLASS
    , THRESHOLDPREDICATE, DOMAIN, ENFORCEMENT, MAXVALUE
    , VIOLATIONRECORDLOGGED, ENABLED, CREATE_TIME, ALTER_TIME
    from SYSCAT.THRESHOLDS
"
THRESHOLDNAME                    ORIGIN THRESHOLDCLASS THRESHOLDPREDICATE DOMAIN ENFORCEMENT MAXVALUE             VIOLATIONRECORDLOGGED ENABLED CREATE_TIME                ALTER_TIME
-------------------------------- ------ -------------- ------------------ ------ ----------- -------------------- --------------------- ------- -------------------------- --------------------------
SYSDEFAULTCONCURRENT             U      A              CONCDBC            SB     D                             11 Y                     N       2019-05-28-09.37.21.536855 2019-05-28-09.37.21.536855
THRACTTIMESC                     U      C              RUNTIMEINALLSC     SB     D                           1800 Y                     Y       2019-08-13-14.53.26.139701 2019-08-13-14.53.26.139701
  2 record(s) selected.
### 以上で、準備は完了です。
3. しきい値に違反する SQL の実行
### テスト用に、"THRACTTIMESC" Activity Runtme threshold の上限を "> 10 seconds" に変更します。
$ db2 "
alter threshold THRACTTIMESC
  when ACTIVITYTOTALRUNTIMEINALLSC > 10 seconds
  remap activity to SYSDEFAULTMANAGEDSUBCLASS
  log event monitor record
"
DB20000I  The SQL command completed successfully.
$ db2 "
select char(THRESHOLDNAME,32) THRESHOLDNAME, ORIGIN, THRESHOLDCLASS
    , THRESHOLDPREDICATE, DOMAIN, ENFORCEMENT, MAXVALUE
    , VIOLATIONRECORDLOGGED, ENABLED, CREATE_TIME, ALTER_TIME
    from SYSCAT.THRESHOLDS
"
THRESHOLDNAME                    ORIGIN THRESHOLDCLASS THRESHOLDPREDICATE DOMAIN ENFORCEMENT MAXVALUE             VIOLATIONRECORDLOGGED ENABLED CREATE_TIME                ALTER_TIME
-------------------------------- ------ -------------- ------------------ ------ ----------- -------------------- --------------------- ------- -------------------------- --------------------------
SYSDEFAULTCONCURRENT             U      A              CONCDBC            SB     D                             11 Y                     N       2019-05-28-09.37.21.536855 2019-05-28-09.37.21.536855
THRACTTIMESC                     U      C              RUNTIMEINALLSC     SB     D                             10 Y                     Y       2019-08-13-14.53.26.139701 2019-08-13-14.54.50.895360
  2 record(s) selected.
 
### 他のセッションから、THRACTTIMESC" Activity Runtme threshold に違反する SQL にするため、表をXロックする。
<another session> $ date; db2 connect to SAMPLE; date
Tue Aug 13 14:55:13 JST 2019
   Database Connection Information
 Database server        = DB2/AIX64 11.1.4.4
 SQL authorization ID   = E111Q4B
 Local database alias   = SAMPLE
Tue Aug 13 14:55:14 JST 2019
<another session> $ date; db2 +c lock table E111Q4B.STAFF in EXCLUSIVE mode
Tue Aug 13 14:55:31 JST 2019
DB20000I  The SQL command completed successfully.
 
### 元のセッションから、THRACTTIMESC" Activity Runtme threshold に違反する SQLを実行
### 表 STAFF のロックのため、出力は待機
$ date; db2 "select count(*) CNT from E111Q4B.STAFF"; date
Tue Aug 13 15:06:15 JST 2019
... wait for the lock on the table STAFF ...
 
### 他のセッションから、デフォルトのサービス・クラスで実行中の Activity を確認し、表ロックをリリースする
### Service Class ID 4 で、ACTIVITY_ID 1 の "select count(*) CNT from E111Q4B.STAFF" が実行中であることを確認
<another session> $ db2 +c "
select APPLICATION_HANDLE, char(APPL_ID,32) APPL_ID, LOCAL_START_TIME
    , ACTIVITY_ID, ACTIVITY_STATE, ACTIVITY_TYPE, SERVICE_CLASS_ID
    , ACTIVITYTOTALTIME_THRESHOLD_ID, ACTIVITYTOTALTIME_THRESHOLD_VALUE
    , ACTIVITYTOTALTIME_THRESHOLD_VIOLATED, ACTIVITYTOTALRUNTIMEINALLSC_THRESHOLD_ID
    , ACTIVITYTOTALRUNTIMEINALLSC_THRESHOLD_VALUE, ACTIVITYTOTALRUNTIMEINALLSC_THRESHOLD_VIOLATED
    , varchar(STMT_TEXT, 256) STMT_TEXT
    from table(mon_get_activity(null, -1))
"
APPLICATION_HANDLE   APPL_ID                          LOCAL_START_TIME           ACTIVITY_ID ACTIVITY_STATE                   ACTIVITY_TYPE                    SERVICE_CLASS_ID ACTIVITYTOTALTIME_THRESHOLD_ID ACTIVITYTOTALTIME_THRESHOLD_VALUE ACTIVITYTOTALTIME_THRESHOLD_VIOLATED ACTIVITYTOTALRUNTIMEINALLSC_THRESHOLD_ID ACTIVITYTOTALRUNTIMEINALLSC_THRESHOLD_VALUE ACTIVITYTOTALRUNTIMEINALLSC_THRESHOLD_VIOLATED STMT_TEXT
-------------------- -------------------------------- -------------------------- ----------- -------------------------------- -------------------------------- ---------------- ------------------------------ --------------------------------- ------------------------------------ ---------------------------------------- ------------------------------------------- ---------------------------------------------- ---------------- ...
                 147 *LOCAL.e111q4b.190813053427      2019-08-13-15.06.14.812596           1 EXECUTING                        READ_DML                                        4                              -                                 -                                    -                                        - -                                                                                        - select count(*) CNT from E111Q4B.STAFF                                                                                                                                                                                                        
                 190 *LOCAL.e111q4b.190813055514      2019-08-13-15.07.09.676546           3 EXECUTING                        READ_DML                                       13                              -                                 -                                    -                                        1 2019-08-13-15.07.20.000000                                                               0
select APPLICATION_HANDLE, char(APPL_ID,32) APPL_ID, LOCAL_START_TIME
        , ACTIVITY_ID, ACTIVITY_STATE, ACTIVITY_TYPE, SERVICE_CLASS_ID
        , ACTIVITYTOTALTIME_THRESHOLD_ID, ACTIVITYTOTALTIME_THRESHOLD_VALUE
        , ACTIVITYTOTALTIME_THRESHOLD_VIOLATED, ACTIVITYTOT
SQL0445W  Value " select APPLICATION_HANDLE, char(APPL_ID,32) APPL_ID, LOCAL_" has been truncated.  SQLSTATE=01004
  2 record(s) selected with 1 warning messages printed.
<another session> $ date; db2 rollback
Tue Aug 13 15:10:09 JST 2019
DB20000I  The SQL command completed successfully.
 
### 元のセッションでは、表ロックのリリース後、待機していた SQL の結果が返される
...
CNT
-----------
         35
  1 record(s) selected.
Tue Aug 13 15:10:04 JST 2019
 
### ここで、THRESHOLD VIOLATIONS イベント・モニター表 "EVM_TBL_THRVIOLATION" に、ACTIVITY_ID 4 のアプリケーション "*LOCAL.e111q4b.190813053427" が、2019-08-13-15.06.26.000000 に、Service Class ID 13 から 4 に Remap され、しきい値違反した記録を確認できます。
$ db2 "
select ACTIVATE_TIMESTAMP, ACTIVITY_COLLECTED, ACTIVITY_ID
    , APPL_ID, char(APPLICATION_NAME,16) APPLICATION_NAME
    , DESTINATION_SERVICE_CLASS_ID, SOURCE_SERVICE_CLASS_ID
    , THRESHOLD_ACTION, THRESHOLD_MAXVALUE, TIME_OF_VIOLATION
    from EVM_TBL_THRVIOLATION
"
ACTIVATE_TIMESTAMP         ACTIVITY_COLLECTED ACTIVITY_ID          APPL_ID                                                          APPLICATION_NAME DESTINATION_SERVICE_CLASS_ID SOURCE_SERVICE_CLASS_ID THRESHOLD_ACTION THRESHOLD_MAXVALUE   TIME_OF_VIOLATION
-------------------------- ------------------ -------------------- ---------------------------------------------------------------- ---------------- ---------------------------- ----------------------- ---------------- -------------------- --------------------------
2019-08-13-14.51.58.107498 N                                     1 *LOCAL.e111q4b.190813053427                                      db2bp                                       4                      13 Remap                              10 2019-08-13-15.06.26.000000
  1 record(s) selected.
 

[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"Component":"","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF016","label":"Linux"},{"code":"PF033","label":"Windows"}],"Version":"All Versions","Edition":"","Line of Business":{"code":"LOB10","label":"Data and AI"}}]

Document Information

Modified date:
13 August 2019

UID

ibm10967299