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 Active2 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 02 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 -17 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.1397012 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.8953602 record(s) selected.
### 他のセッションから、THRACTTIMESC" Activity Runtme threshold に違反する SQL にするため、表をXロックする。
<another session> $ date; db2 connect to SAMPLE; date
Tue Aug 13 14:55:13 JST 2019Database Connection InformationDatabase server = DB2/AIX64 11.1.4.4
SQL authorization ID = E111Q4B
Local database alias = SAMPLETue 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 のロックのため、出力は待機
### 表 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" が実行中であることを確認
### 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=010042 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
-----------
351 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.0000001 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"}}]
Was this topic helpful?
Document Information
Modified date:
13 August 2019
UID
ibm10967299